<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>43987</bug_id>
          
          <creation_ts>2010-08-13 12:06:15 -0700</creation_ts>
          <short_desc>Downloading using XHR is much slower than before</short_desc>
          <delta_ts>2010-11-08 06:24:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Behrooz">behrooz.noorizadeh</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>abarth</cc>
    
    <cc>ademar</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>dave+webkit</cc>
    
    <cc>dglazkov</cc>
    
    <cc>emil.zimmermann</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>hausmann</cc>
    
    <cc>kamaji</cc>
    
    <cc>kling</cc>
    
    <cc>nancy.piedra</cc>
    
    <cc>s.mathur</cc>
    
    <cc>suresh.voruganti</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wellu.makinen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>264458</commentid>
    <comment_count>0</comment_count>
    <who name="Behrooz">behrooz.noorizadeh</who>
    <bug_when>2010-08-13 12:06:15 -0700</bug_when>
    <thetext>On a simple test case, I tried to download a 5Mb file using XHR request. The download time on the latest WebKit is much more than the time I tried it a few months ago. Looking into traces, it seems most of the time is spent in string concatenation:

WebCore::ScriptString::operator+=(WebCore::String const&amp;)

I think, this issue is introduced since the introduction of the new JS parser. Specifically, JavaScriptCore/wtf/Vector.h has templates for AlignedBuffer with the size of 1 byte to 64 bytes. 64 bytes is too small for downloading big chunks of data. Basically, what is happening is that we keep expanding the vector by only 64 bytes many times and thats why the ScriptString::operator+ is so slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265164</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-16 10:57:18 -0700</bug_when>
    <thetext>(In reply to comment #0)

Thanks for spotting this.

&gt; I think, this issue is introduced since the introduction of the new JS parser. Specifically, JavaScriptCore/wtf/Vector.h has templates for AlignedBuffer with the size of 1 byte to 64 bytes. 64 bytes is too small for downloading big chunks of data. Basically, what is happening is that we keep expanding the vector by only 64 bytes many times and thats why the ScriptString::operator+ is so slow.

I don&apos;t think Vector is the problem here. 64 bytes is the initial, inline capacity of the vector, not its growth policy. Vectors use a 1.25X growth policy. See Vector&lt;T, inlineCapacity&gt;::expandCapacity().

The problem here is that ScriptString creates a new vector for each append operation, instead of using a persistent vector a rope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265165</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-16 10:57:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/8314324&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265166</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-08-16 11:00:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/52329

This was caused by string refactoring, which removed UString&apos;s built-in rope-ish behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276756</commentid>
    <comment_count>4</comment_count>
    <who name="emil zimmermann">emil.zimmermann</who>
    <bug_when>2010-09-09 14:16:14 -0700</bug_when>
    <thetext>Can you give us an estimate, when the fix could be coming?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277440</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-09-10 14:30:54 -0700</bug_when>
    <thetext>I hope to find time to look at this within the next few weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280373</commentid>
    <comment_count>6</comment_count>
    <who name="emil zimmermann">emil.zimmermann</who>
    <bug_when>2010-09-16 14:50:53 -0700</bug_when>
    <thetext>Any chance you can do that sooner? this is becoming quite important. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280376</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-09-16 14:53:30 -0700</bug_when>
    <thetext>I&apos;m afraid I have a busy schedule right now, but feel free to look into this bug yourself. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280377</commentid>
    <comment_count>8</comment_count>
    <who name="emil zimmermann">emil.zimmermann</who>
    <bug_when>2010-09-16 14:55:15 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;m afraid I have a busy schedule right now, but feel free to look into this bug yourself. :-)

It is NOT my job I am afraid. Take your time...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288998</commentid>
    <comment_count>9</comment_count>
      <attachid>69648</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-10-04 10:25:00 -0700</bug_when>
    <thetext>Created attachment 69648
Proposed patch, first stab

Note that this patch doesn&apos;t address the problem on V8 - I&apos;m mostly interested in whether this approach makes sense, or if we should be putting the rope logic in XMLHttpRequest.{cpp,h} instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289252</commentid>
    <comment_count>10</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-04 16:02:04 -0700</bug_when>
    <thetext>Let me comment on this patch tomorrow. May be able to do something to support v8 too using overcapacity on StringImpls. Would say more but plane about to take off.
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291840</commentid>
    <comment_count>11</comment_count>
      <attachid>69648</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-08 13:46:00 -0700</bug_when>
    <thetext>Comment on attachment 69648
Proposed patch, first stab

Okay, I don&apos;t think this is quite how we want to fix this.  Fundamentally this patch is doing the right thing, in that we should be using a smarter string building layer rather that resolving a fresh string every time new data is available, but it&apos;s doing it in slightly the wrong way:

(1) I think this patch is fixing the problem in the wrong place.  We don&apos;t want to be adding more code to ScriptString - in fact, we don&apos;t really want ScriptString to exist at all! (this class only existed because XMLHttpRequest used to hold a UString, which wasn&apos;t great from design perspective in the first place, and clearly isn&apos;t ).  Strings in WebCore are by design immutable, so XMLHttpRequest holding onto a string and appending to it is not the correct approach.  The place this problem needs to be fixed is in XMLHttpRequest.  (Moreover, all uses of ScriptString are now wrong.  XMLHttpRequest only held a StringString under the assumption this can be used for fast concatenation, which is no longer (necessarily) the case – as demonstrated by this bug.  New code in fileapi is currently using ScriptString to mimic XMLHttpRequest, and as such will also be mimicking this O(N^2) performance too.  Whatever fix is made for this bug should also be applied to FileReader/FileReaderSync - and having done so StringString will be redundant.)

(2) We shouldn&apos;t be adding a new type to build Strings – we already have StringBuilder.  XMLHttpRequest should just use a StringBuilder.  If StringBuilder does not have the performance characteristics we require, we should fix it ...

(3) ... and StringBuilder probably doesn&apos;t have the performance characteristics we require. :-)  Building the string up as a rope saves resolving the string on every append, but accesses to the responseText string while data is being loaded will still result in a copy to resolve, and as such repeated calls to access the responseText could still result in repeated copying of the character data in the String.  Instead we should probably look at using a allocating a string buffer with overcapacity, such that appends can write into the existing buffer.  We should be able support with using the existing createUninitialized &amp; substring mechanisms supported by WTF StringImpls.  Using a 2x overcapacity should make string construction O(N), with zero cost to resolve.

I have a patch for (1) and (2), will attach, and most of the code written for (3) too.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291841</commentid>
    <comment_count>12</comment_count>
      <attachid>70283</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-08 13:49:03 -0700</bug_when>
    <thetext>Created attachment 70283
First cut, switch XHR to use StringBuilder

Couple of rough edges, bit this patch should be basically good.  Going to finish cleaning up &amp; take a stab at an improved StringBuilder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291842</commentid>
    <comment_count>13</comment_count>
      <attachid>70284</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-08 13:52:27 -0700</bug_when>
    <thetext>Created attachment 70284
Ooops, ignore the WTF changes from the last patch, probably not how we&apos;d do this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293537</commentid>
    <comment_count>14</comment_count>
      <attachid>70632</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-13 11:10:12 -0700</bug_when>
    <thetext>Created attachment 70632
[PART I] Allow fast inspection of intermediate states of a StringBuilder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293553</commentid>
    <comment_count>15</comment_count>
      <attachid>70635</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-13 11:27:44 -0700</bug_when>
    <thetext>Created attachment 70635
[PART II] Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder

No performance impact on SunSpider, Dromaeo DOM Core / CSS Selectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293563</commentid>
    <comment_count>16</comment_count>
      <attachid>70632</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-13 11:37:01 -0700</bug_when>
    <thetext>Comment on attachment 70632
[PART I] Allow fast inspection of intermediate states of a StringBuilder.

I stab at you and your size vs. length renames :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293565</commentid>
    <comment_count>17</comment_count>
      <attachid>70635</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-13 11:39:31 -0700</bug_when>
    <thetext>Comment on attachment 70635
[PART II] Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293573</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-13 11:50:43 -0700</bug_when>
    <thetext>Attachment 70632 did not build on chromium:
Build output: http://queues.webkit.org/results/4391009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293656</commentid>
    <comment_count>19</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-13 13:11:04 -0700</bug_when>
    <thetext>Fixed in r69683 + r69688.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293701</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-13 14:06:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69688 might have broken Chromium Mac Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299593</commentid>
    <comment_count>21</comment_count>
    <who name="Suresh Voruganti">suresh.voruganti</who>
    <bug_when>2010-10-26 10:57:24 -0700</bug_when>
    <thetext>Nancy, Were you able to port the patch to Qtwebkit 2.1 branch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299850</commentid>
    <comment_count>22</comment_count>
    <who name="Nancy Piedra">nancy.piedra</who>
    <bug_when>2010-10-26 15:32:33 -0700</bug_when>
    <thetext>We&apos;ve been working for over a week to try to port this to webkit 2.1.  The changes are far reaching and I&apos;m not sure it will be possible to port.  Will spend a few more days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300353</commentid>
    <comment_count>23</comment_count>
    <who name="Keith Kyzivat">kamaji</who>
    <bug_when>2010-10-27 10:39:46 -0700</bug_when>
    <thetext>I have been unable to port the changes, and I think I&apos;m going to give up at this point.

I have also been unable to really determine that there is a significant performance impact without this fix.  In theory it sounds like there&apos;d be a significant performance gain, but I&apos;m not able to see that from tests on simple, large xhrs I&apos;ve tried, when testing trunk before and after these fixes.  Tested using ~5MB XHR content on x86 Linux, relatively new Intel hardware.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300504</commentid>
    <comment_count>24</comment_count>
    <who name="David Tapuska">dave+webkit</who>
    <bug_when>2010-10-27 13:22:24 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; I have been unable to port the changes, and I think I&apos;m going to give up at this point.
&gt; 
&gt; I have also been unable to really determine that there is a significant performance impact without this fix.  In theory it sounds like there&apos;d be a significant performance gain, but I&apos;m not able to see that from tests on simple, large xhrs I&apos;ve tried, when testing trunk before and after these fixes.  Tested using ~5MB XHR content on x86 Linux, relatively new Intel hardware.

This was a page I initially noticed:
http://i.dslr.net/tinyspeedtest.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300884</commentid>
    <comment_count>25</comment_count>
    <who name="Wellu Mäkinen">wellu.makinen</who>
    <bug_when>2010-10-27 22:26:24 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; I have been unable to port the changes, and I think I&apos;m going to give up at this point.
&gt; 
&gt; I have also been unable to really determine that there is a significant performance impact without this fix.  In theory it sounds like there&apos;d be a significant performance gain, but I&apos;m not able to see that from tests on simple, large xhrs I&apos;ve tried, when testing trunk before and after these fixes.  Tested using ~5MB XHR content on x86 Linux, relatively new Intel hardware.

If you use lower end hardware you&apos;ll see the impact. I guess this won&apos;t happen on desktop environment where you have plenty of processing power and memory.

Anyway, there really is a bug in the implementation and it manifests under certain conditions as very slow downloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301025</commentid>
    <comment_count>26</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2010-10-28 06:15:09 -0700</bug_when>
    <thetext>*** Bug 46746 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304634</commentid>
    <comment_count>27</comment_count>
    <who name="Keith Kyzivat">kamaji</who>
    <bug_when>2010-11-04 07:08:29 -0700</bug_when>
    <thetext>Ademar is going to apply the original proposed patch Andreas Kling provided for this bug to QtWebkit 2.1 -- it applies much more easily to QtWebkit 2.1.  Stan has verified this fixes XHR crashes on some Symbian devices with XHR requests of 5MB and 10MB -- which had previously failed (See bug 46746).  This also should improve performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306101</commentid>
    <comment_count>28</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-11-08 06:24:35 -0800</bug_when>
    <thetext>A backported version of the original patch by Andreas Kling was pushed to QtWebkit-2.1 (http://gitorious.org/+qtwebkit-developers/webkit/qtwebkit/commit/20290f01a54b739d0591979f361b99bf13c2f40a).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69648</attachid>
            <date>2010-10-04 10:25:00 -0700</date>
            <delta_ts>2010-10-13 11:27:44 -0700</delta_ts>
            <desc>Proposed patch, first stab</desc>
            <filename>bug-43987.diff</filename>
            <type>text/plain</type>
            <size>4643</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDk2MDJkYS4uNjRjYTIyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0xMC0wNCAgQW5kcmVhcyBLbGlu
ZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRG93bmxvYWRpbmcgdXNpbmcgWEhSIGlzIG11Y2ggc2xvd2VyIHRoYW4g
YmVmb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
Mzk4NworCisgICAgICAgIEdpdmUgU2NyaXB0U3RyaW5nIGEgcm9wZSB0byBhdm9pZCBzbG93bmVz
cyB3aGVuIGJ1aWxkaW5nIHN0cmluZ3MKKyAgICAgICAgd2l0aCB0aGUgKz0gb3BlcmF0b3IgKHVz
ZWQgYnkgWEhSLikKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpTY3JpcHRTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvciBKU0M6OlVTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvciBTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U3RyaW5nOjp1c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6
aXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6c2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRTdHJpbmc6Om9wZXJhdG9yKz0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5n
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OmJ1aWxkSWZOZWVkZWQpOgorCiAy
MDEwLTEwLTAzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCBidWlsZCBmaXggZm9yIHI2ODk5Ni4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0U3RyaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmlu
Zy5oCmluZGV4IDc0MDE4MTguLmQwZjMzOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0U3RyaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcu
aApAQCAtMzQsNTMgKzM0LDk3IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KLSNpbmNs
dWRlIDxydW50aW1lL1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNj
cmlwdFN0cmluZyB7CiBwdWJsaWM6Ci0gICAgU2NyaXB0U3RyaW5nKCkge30KLSAgICBTY3JpcHRT
dHJpbmcoY29uc3QgY2hhciogcykgOiBtX3N0cihzKSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25z
dCBTdHJpbmcmIHMpIDogbV9zdHIoc3RyaW5nVG9VU3RyaW5nKHMpKSB7fQotICAgIFNjcmlwdFN0
cmluZyhjb25zdCBKU0M6OlVTdHJpbmcmIHMpIDogbV9zdHIocykge30KKyAgICBTY3JpcHRTdHJp
bmcoKSA6IG1fcm9wZUxlbmd0aCgwKSB7fQorICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBz
KSA6IG1fc3RyKHMpLCBtX3JvcGVMZW5ndGgoMCkge30KKyAgICBTY3JpcHRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBzKSA6IG1fc3RyKHN0cmluZ1RvVVN0cmluZyhzKSksIG1fcm9wZUxlbmd0aCgwKSB7
fQorICAgIFNjcmlwdFN0cmluZyhjb25zdCBKU0M6OlVTdHJpbmcmIHMpIDogbV9zdHIocyksIG1f
cm9wZUxlbmd0aCgwKSB7fQogCi0gICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHI7IH0KLSAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7IHJldHVybiB1c3Ry
aW5nVG9TdHJpbmcobV9zdHIpOyB9Ci0gICAgY29uc3QgSlNDOjpVU3RyaW5nJiB1c3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHI7IH0KKyAgICBvcGVyYXRvciBKU0M6OlVTdHJpbmcoKSBjb25z
dCB7IGJ1aWxkSWZOZWVkZWQoKTsgcmV0dXJuIG1fc3RyOyB9CisgICAgb3BlcmF0b3IgU3RyaW5n
KCkgY29uc3QgeyBidWlsZElmTmVlZGVkKCk7IHJldHVybiB1c3RyaW5nVG9TdHJpbmcobV9zdHIp
OyB9CisgICAgY29uc3QgSlNDOjpVU3RyaW5nJiB1c3RyaW5nKCkgY29uc3QgeyBidWlsZElmTmVl
ZGVkKCk7IHJldHVybiBtX3N0cjsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biBtX3N0ci5pc051bGwoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
dHIubGVuZ3RoKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLmlz
TnVsbCgpICYmICFtX3JvcGVMZW5ndGg7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyLmxlbmd0aCgpICsgbV9yb3BlTGVuZ3RoOyB9CisKKyAgICBTY3JpcHRTdHJpbmco
Y29uc3QgU2NyaXB0U3RyaW5nJiBzKQorICAgICAgICA6IG1fcm9wZUxlbmd0aCgwKQorICAgIHsK
KyAgICAgICAgcy5idWlsZElmTmVlZGVkKCk7CisgICAgICAgIG1fc3RyID0gcy5tX3N0cjsKKyAg
ICB9CisKKyAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBTY3JpcHRTdHJpbmcmIHMp
CisgICAgeworICAgICAgICBzLmJ1aWxkSWZOZWVkZWQoKTsKKyAgICAgICAgbV9zdHIgPSBzLm1f
c3RyOworICAgICAgICBtX3JvcGUuY2xlYXIoKTsKKyAgICAgICAgbV9yb3BlTGVuZ3RoID0gMDsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KIAogICAgIFNjcmlwdFN0cmluZyYgb3BlcmF0
b3I9KGNvbnN0IGNoYXIqIHMpCiAgICAgewogICAgICAgICBtX3N0ciA9IHM7CisgICAgICAgIG1f
cm9wZS5jbGVhcigpOworICAgICAgICBtX3JvcGVMZW5ndGggPSAwOwogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQogCiAgICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRvcis9KGNvbnN0IFN0cmlu
ZyYgcykKICAgICB7Ci0gICAgICAgIEpTQzo6U3RyaW5nQnVpbGRlciBidWZmZXI7Ci0gICAgICAg
IGJ1ZmZlci5hcHBlbmQobV9zdHIpOwotICAgICAgICBidWZmZXIuYXBwZW5kKHN0cmluZ1RvVVN0
cmluZyhzKSk7Ci0gICAgICAgIG1fc3RyID0gYnVmZmVyLmJ1aWxkKCk7CisgICAgICAgIG1fcm9w
ZS5hcHBlbmQoc3RyaW5nVG9VU3RyaW5nKHMpKTsKKyAgICAgICAgbV9yb3BlTGVuZ3RoICs9IHMu
bGVuZ3RoKCk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgU2NyaXB0U3RyaW5nJiBzKSBjb25zdAogICAgIHsKKyAgICAgICAgYnVpbGRJ
Zk5lZWRlZCgpOwogICAgICAgICByZXR1cm4gbV9zdHIgPT0gcy5tX3N0cjsKICAgICB9CiAKICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2NyaXB0U3RyaW5nJiBzKSBjb25zdAogICAgIHsKKyAg
ICAgICAgYnVpbGRJZk5lZWRlZCgpOwogICAgICAgICAvLyBBdm9pZCBleHBvcnRpbmcgYW4gZXh0
cmEgc3ltYm9sIGJ5IHJlLXVzaW5nICI9PSIgb3BlcmF0b3IuCiAgICAgICAgIHJldHVybiAhKG1f
c3RyID09IHMubV9zdHIpOwogICAgIH0KIAogcHJpdmF0ZToKKworICAgIHZvaWQgYnVpbGRJZk5l
ZWRlZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fcm9wZUxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcjsKKyAgICAgICAgYnVm
ZmVyLnJlc2VydmVDYXBhY2l0eShtX3N0ci5sZW5ndGgoKSArIG1fcm9wZUxlbmd0aCk7CisgICAg
ICAgIGJ1ZmZlci5hcHBlbmQobV9zdHIuY2hhcmFjdGVycygpLCBtX3N0ci5sZW5ndGgoKSk7CisK
KyAgICAgICAgRGVxdWU8SlNDOjpVU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JvcGUu
YmVnaW4oKTsKKyAgICAgICAgRGVxdWU8SlNDOjpVU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9yb3BlLmVuZCgpOworCisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIGNvbnN0IEpTQzo6VVN0cmluZyYgcyA9ICppdDsKKyAgICAgICAgICAgIGJ1ZmZl
ci5hcHBlbmQocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgU2NyaXB0U3RyaW5nKiB0aGF0ID0gY29uc3RfY2FzdDxTY3JpcHRTdHJpbmcqPih0aGlzKTsK
KyAgICAgICAgdGhhdC0+bV9yb3BlLmNsZWFyKCk7CisgICAgICAgIHRoYXQtPm1fc3RyID0gSlND
OjpVU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOworICAgICAgICB0aGF0LT5t
X3JvcGVMZW5ndGggPSAwOworICAgIH0KKwogICAgIEpTQzo6VVN0cmluZyBtX3N0cjsKKyAgICBE
ZXF1ZTxKU0M6OlVTdHJpbmc+IG1fcm9wZTsKKyAgICBzaXplX3QgbV9yb3BlTGVuZ3RoOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="59361"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70283</attachid>
            <date>2010-10-08 13:49:03 -0700</date>
            <delta_ts>2010-10-08 13:52:27 -0700</delta_ts>
            <desc>First cut, switch XHR to use StringBuilder</desc>
            <filename>ScriptStringToStringBuffer.patch</filename>
            <type>text/plain</type>
            <size>58697</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjkzNDYpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDA3LDcgKzI0MDcsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAxNDlDMjc3MTA4OTAyQUZFMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJKYXZhU2NyaXB0Q29yZSIgKi87CiAJCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmds
aXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAo
CiAJCQkJRW5nbGlzaCwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJl
dmlzaW9uIDY5MzQ2KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIGNsYXNzIFN0cmluZ0ltcGwgOiBwdWJsaWMg
U3RyaW5nSW1wbEJhc2UKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFuZENoYXJhY3RlcnNU
cmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7Ci1wcml2YXRlOgorcHJvdGVjdGVk
OgogICAgIC8vIFVzZWQgdG8gY29uc3RydWN0IHN0YXRpYyBzdHJpbmdzLCB3aGljaCBoYXZlIGFu
IHNwZWNpYWwgcmVmQ291bnQgdGhhdCBjYW4gbmV2ZXIgaGl0IHplcm8uCiAgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZSBzdGF0aWMgc3RyaW5nIHdpbGwgbmV2ZXIgYmUgZGVzdHJveWVkLCB3aGlj
aCBpcyBpbXBvcnRhbnQgYmVjYXVzZQogICAgIC8vIHN0YXRpYyBzdHJpbmdzIHdpbGwgYmUgc2hh
cmVkIGFjcm9zcyB0aHJlYWRzICYgcmVmLWNvdW50ZWQgaW4gYSBub24tdGhyZWFkc2FmZSBtYW5u
ZXIuCkBAIC0zMTgsNyArMzE4LDcgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIE5TU3RyaW5nKigp
OwogI2VuZGlmCiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBudW1iZXIgbXVz
dCBiZSBhdCBsZWFzdCAyIHRvIGF2b2lkIHNoYXJpbmcgZW1wdHksIG51bGwgYXMgd2VsbCBhcyAx
IGNoYXJhY3RlciBzdHJpbmdzIGZyb20gU21hbGxTdHJpbmdzLgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX2NvcHlDaGFyc0lubGluZUN1dE9mZiA9IDIwOwogCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ4LDYgKzk0OCw4
MyBAQCBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciogZGF0CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihjaGFyYWN0ZXJzVG9Eb3VibGUoZGF0YSwgbGVuZ3RoLCBvaykp
OwogfQogCit2b2lkIE11dGFibGVTdHJpbmc6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFkZGluZyBudWxsIGRvZXMgbm90IGNoYW5n
ZSB0aGUgc3RyaW5nLgorICAgIGlmICghY2hhcmFjdGVycykKKyAgICAgICAgcmV0dXJuOworICAg
IC8vIEFkZGluZyBhbiBlbXB0eSBzdHJpbmcgc2hvdWxkIHR1cm4gdGhpcyBpbnRvIHRoZSBlbXB0
eSBzdGluZywKKyAgICAvLyBmb3IgYWxsIG90aGVyIGNhc2VzIGNvbnZlcnRpbmcgdGhpcyBub3cg
bWVhbnMgd2UgY2FuIHVzZSBtX2ltcGwgd2l0aG91dCBjaGVja2luZy4KKyAgICBpZiAoIW1faW1w
bCkKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBhZGRpdGlvbmFsIHNwYWNlIGF2YWls
YWJsZSAoYW5kIGFjY291bnRlZCBmb3IgaW4gbV9sZW5ndGgpLgorICAgIFVDaGFyKiBkYXRhOwor
ICAgIGFwcGVuZFVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsKKworICAgIC8vIFdlIHNob3Vs
ZCBoYXZlIGZhaWxlZCBieSBub3cgKGluIGFsbG9jYXRpb24pIGlmIHRoaXMgd291bGQgb3ZlcmZs
b3cuCisgICAgQVNTRVJUICgoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogMikgPiBsZW5n
dGgpOworICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bmd0aCkgKiAyKTsKK30KKwordm9pZCBNdXRhYmxlU3RyaW5nOjphcHBlbmQoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFkZGluZyBudWxsIGRvZXMg
bm90IGNoYW5nZSB0aGUgc3RyaW5nLgorICAgIGlmICghY2hhcmFjdGVycykKKyAgICAgICAgcmV0
dXJuOworICAgIC8vIEFkZGluZyBhbiBlbXB0eSBzdHJpbmcgc2hvdWxkIHR1cm4gdGhpcyBpbnRv
IHRoZSBlbXB0eSBzdGluZywKKyAgICAvLyBmb3IgYWxsIG90aGVyIGNhc2VzIGNvbnZlcnRpbmcg
dGhpcyBub3cgbWVhbnMgd2UgY2FuIHVzZSBtX2ltcGwgd2l0aG91dCBjaGVja2luZy4KKyAgICBp
ZiAoIW1faW1wbCkKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKKyAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBhZGRpdGlvbmFsIHNw
YWNlIGF2YWlsYWJsZSAoYW5kIGFjY291bnRlZCBmb3IgaW4gbV9sZW5ndGgpLgorICAgIFVDaGFy
KiBkYXRhOworICAgIGFwcGVuZFVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkYXRhKTsKKworICAgIFVD
aGFyKiBlbmQgPSBkYXRhICsgbGVuZ3RoOworICAgIHdoaWxlIChkYXRhIDwgZW5kKQorICAgICAg
ICAqZGF0YSsrID0gKHVuc2lnbmVkIGNoYXIpKmNoYXJhY3RlcnMrKzsKK30KKwordm9pZCBNdXRh
YmxlU3RyaW5nOjphcHBlbmRVbmluaXRpYWxpemVkKHVuc2lnbmVkIGFkZGl0aW9uYWxMZW5ndGgs
IFVDaGFyKiYgZGF0YSkKK3sKKyAgICBBU1NFUlQobV9pbXBsKTsKKyAgICBBU1NFUlQoYWRkaXRp
b25hbExlbmd0aCk7CisKKyAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gbV9pbXBsLT5sZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCA9IGN1cnJlbnRMZW5ndGggKyBhZGRp
dGlvbmFsTGVuZ3RoOworICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KKyAgICBpZiAocmVxdWly
ZWRMZW5ndGggPCBjdXJyZW50TGVuZ3RoKQorICAgICAgICBDUkFTSCgpOworCisgICAgaWYgKG1f
bXV0YWJsZUltcGwgJiYgbV9tdXRhYmxlSW1wbCA9PSBtX2ltcGwpIHsKKyAgICAgICAgLy8gV2Ug
aGF2ZSBhbiBleGlzdGluZyBNdXRhYmxlU3RyaW5nSW1wbCwgZW5zdXJlIGl0IGhhcyBzdWZmaWNp
ZW50IGF2YWlsYWJsZSBjYXBhY2l0eS4KKyAgICAgICAgbV9tdXRhYmxlSW1wbC0+ZW5zdXJlQ2Fw
YWNpdHkocmVxdWlyZWRMZW5ndGgpOworCisgICAgICAgIC8vIEVpdGhlciBleHBhbmQgdGhlIGV4
aXN0aW5nIGltcGwsIG9yIGFsbG9jYXRlIGEgbmV3IG9uZSBpZiB0aGUgY3VycmVudCBvbmUgaGFz
IGVzY2FwZWQuCisgICAgICAgIGlmIChtX211dGFibGVJbXBsLT5oYXNUd29SZWZzKCkpCisgICAg
ICAgICAgICBtX211dGFibGVJbXBsLT5zZXRMZW5ndGgocmVxdWlyZWRMZW5ndGgpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG1fbXV0YWJsZUltcGwgPSBtX211dGFibGVJbXBsLT5zdXBl
cnN0cmluZyhyZXF1aXJlZExlbmd0aCk7CisgICAgICAgICAgICBtX2ltcGwgPSBtX211dGFibGVJ
bXBsOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTmVlZCB0byBhbGxvY2F0
ZSBhIG5ldyBidWZmZXIuCisgICAgICAgIHVuc2lnbmVkIGFsbG9jYXRpb25MZW5ndGggPSAoY3Vy
cmVudExlbmd0aCA/IGN1cnJlbnRMZW5ndGggOiByZXF1aXJlZExlbmd0aCkgKiAyOworICAgICAg
ICBpZiAoYWxsb2NhdGlvbkxlbmd0aCA8IHJlcXVpcmVkTGVuZ3RoKQorICAgICAgICAgICAgYWxs
b2NhdGlvbkxlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOworICAgICAgICBtX211dGFibGVJbXBsID0g
TXV0YWJsZVN0cmluZ0ltcGw6OmNyZWF0ZShyZXF1aXJlZExlbmd0aCwgYWxsb2NhdGlvbkxlbmd0
aCk7CisgICAgICAgIG1lbWNweShtX211dGFibGVJbXBsLT5tdXRhYmxlQ2hhcmFjdGVycygpLCBt
X2ltcGwtPmNoYXJhY3RlcnMoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihjdXJyZW50TGVuZ3RoKSAq
IDIpOworICAgICAgICBtX2ltcGwgPSBtX211dGFibGVJbXBsOworICAgIH0KKworICAgIGRhdGEg
PSBtX211dGFibGVJbXBsLT5tdXRhYmxlQ2hhcmFjdGVycygpICsgY3VycmVudExlbmd0aDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gNjkzNDYpCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiw3IEBAIHB1
YmxpYzoKICAgICBTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1faW1w
bChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1f
aW1wbDsKIH07CiAKQEAgLTQ1Miw2ICs0NTIsMjQxIEBAIHRlbXBsYXRlIDw+IHN0cnVjdCBWZWN0
b3JUcmFpdHM8U3RyaW5nPiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0
aE1lbXNldCA9IHRydWU7CiB9OwogCisKK2NsYXNzIE11dGFibGVTdHJpbmdJbXBsIDogcHVibGlj
IFN0cmluZ0ltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE11dGFibGVTdHJp
bmdJbXBsPiBjcmVhdGUodW5zaWduZWQgc3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgpCisgICAgeworICAgICAgICBBU1NFUlQoc3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgQVNTRVJU
KGJ1ZmZlckxlbmd0aCA+PSBzdHJpbmdMZW5ndGgpOworICAgICAgICAvLyBTdGFydCB3aXRoIGEg
cmVhc29uYWJsZSBtaW5pbXVtIHNpemUuCisgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAzMikK
KyAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IDMyOworCisgICAgICAgIFVDaGFyKiBtdXRhYmxl
RGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyTGVuZ3RoLCBtdXRhYmxlRGF0YSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZVN0cmluZ0ltcGwobXV0YWJsZURhdGEsIHN0cmluZ0xl
bmd0aCwgYnVmZmVyLnJlbGVhc2UoKSkpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlQ2FwYWNp
dHkodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBidWZm
ZXJMZW5ndGggPSBzdWJzdHJpbmdCdWZmZXIoKS0+bGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKGJ1
ZmZlckxlbmd0aCA+PSByZXF1aXJlZExlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBUcnkgdG8gYXQgbGVhc3QgZG91YmxlIHRoZSBsZW5ndGggb24gZWFjaCByZWFsbG9j
LgorICAgICAgICB1bnNpZ25lZCBkb3VibGVCdWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGggKiAy
OworICAgICAgICBpZiAoZG91YmxlQnVmZmVyTGVuZ3RoID4gcmVxdWlyZWRMZW5ndGgpCisgICAg
ICAgICAgICByZXF1aXJlZExlbmd0aCA9IGRvdWJsZUJ1ZmZlckxlbmd0aDsKKworICAgICAgICAv
LyBBbGxvY2F0ZSBhIG5ldyBiYWNraW5nIGJ1ZmZlciwgY29weSBleGlzdGluZyBkYXRhIGFjY3Jv
c3MsIHVwZGF0ZSB0aGlzIGltcGwncworICAgICAgICAvLyBidWZmZXIgcG9pbnRlciwgYW5kIGZy
ZWUgdGhlIG9sZCBidWZmZXIuCisgICAgICAgIFVDaGFyKiBtdXRhYmxlRGF0YTsKKyAgICAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG5ld0J1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQocmVxdWlyZWRMZW5ndGgsIG11dGFibGVEYXRhKTsKKyAgICAgICAgbWVtY3B5KG11dGFi
bGVEYXRhLCBtX2RhdGEsIG1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1fZGF0
YSA9IG11dGFibGVEYXRhOworICAgICAgICBtX3N1YnN0cmluZ0J1ZmZlci0+ZGVyZWYoKTsKKyAg
ICAgICAgbV9zdWJzdHJpbmdCdWZmZXIgPSBuZXdCdWZmZXIucmVsZWFzZSgpLnJlbGVhc2VSZWYo
KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzVHdvUmVmcygpIGNvbnN0IHsg
cmV0dXJuIChtX3JlZkNvdW50QW5kRmxhZ3MgJiAoc19yZWZDb3VudE1hc2sgfCBzX3JlZkNvdW50
RmxhZ1N0YXRpYykpID09IHNfcmVmQ291bnRJbmNyZW1lbnQgKyBzX3JlZkNvdW50SW5jcmVtZW50
OyB9CisKKyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAg
ICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisKKyAgICBVQ2hhciogbXV0YWJsZUNoYXJhY3Rl
cnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VUNoYXIqPihjaGFyYWN0ZXJz
KCkpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8TXV0YWJsZVN0cmluZ0ltcGw+IHN1cGVyc3Ry
aW5nKHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFN0cmluZ0ltcGwqIGJ1ZmZlciA9
IHN1YnN0cmluZ0J1ZmZlcigpOworICAgICAgICBBU1NFUlQobGVuZ3RoID4gbV9sZW5ndGgpOwor
ICAgICAgICBBU1NFUlQobGVuZ3RoIDwgYnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTXV0YWJsZVN0cmluZ0ltcGwobV9kYXRhLCBsZW5ndGgsIGJ1ZmZlcikp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdJbXBsKiBzdWJzdHJpbmdCdWZmZXIoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmlu
Zyk7CisgICAgICAgIEFTU0VSVChjaGFyYWN0ZXJzKCkgPT0gbV9zdWJzdHJpbmdCdWZmZXItPmNo
YXJhY3RlcnMoKSk7CisgICAgICAgIEFTU0VSVChsZW5ndGgoKSA8PSBtX3N1YnN0cmluZ0J1ZmZl
ci0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gbV9zdWJzdHJpbmdCdWZmZXI7CisgICAgfQor
CisgICAgTXV0YWJsZVN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIpCisgICAgICAgIDogU3RyaW5nSW1wbChk
YXRhLCBsZW5ndGgsIGJ1ZmZlcikKKyAgICB7CisgICAgfQorfTsKKworCisKKworY2xhc3MgTXV0
YWJsZVN0cmluZyA6IHB1YmxpYyBTdHJpbmcgeworcHVibGljOgorICAgIC8vIENvbnN0cnVjdCBh
IG51bGwgc3RyaW5nLCBkaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBlbXB0eSBzdHJpbmcuCisgICAg
TXV0YWJsZVN0cmluZygpIHsgfQorCisgICAgTXV0YWJsZVN0cmluZyhTdHJpbmcmIHN0cmluZykK
KyAgICAgICAgOiBTdHJpbmcoc3RyaW5nLmltcGwoKSkKKyAgICB7CisgICAgfQorCisgICAgLy8g
Q29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0aW4xIGRhdGEsIGZyb20gYSBudWxsLXRlcm1pbmF0
ZWQgc291cmNlLgorICAgIE11dGFibGVTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycykKKyAg
ICB7CisgICAgICAgIGFwcGVuZChjaGFyYWN0ZXJzKTsKKyAgICB9CisKKyAgICAvLyBIYXNoIHRh
YmxlIGRlbGV0ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIg
Y29waWVkIG9yIGRlc3Ryb3llZC4KKyAgICBNdXRhYmxlU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkgOiBTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQor
CisgICAgTXV0YWJsZVN0cmluZyYgb3BlcmF0b3IrPShjb25zdCBTdHJpbmcmIHN0cmluZykgeyBh
cHBlbmQoc3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CisgICAgTXV0YWJsZVN0cmluZyYgb3BlcmF0
b3IrPShjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKSB7IGFwcGVuZChjaGFyYWN0ZXJzKTsgcmV0dXJu
ICp0aGlzOyB9CisgICAgTXV0YWJsZVN0cmluZyYgb3BlcmF0b3IrPShVQ2hhciBjKSB7IGFwcGVu
ZChjKTsgcmV0dXJuICp0aGlzOyB9CisgICAgTXV0YWJsZVN0cmluZyYgb3BlcmF0b3IrPShjaGFy
IGMpIHsgYXBwZW5kKGMpOyByZXR1cm4gKnRoaXM7IH0KKworICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQorICAgIHsKKyAgICAgICAgLy8gRmFzdCBjYXNlIGZvciBhcHBlbmQs
IHRvIHNhdmUgYWxsb2NhdGluZyBhIG5ldyBpbXBsIGluIHRoaXMgY2FzZSAtCisgICAgICAgIC8v
IGlmIHRoaXMgc3RyaW5nIGlzIGVtcHR5IGFuZCB0aGUgb3RoZXIgc3RyaW5nIGlzIG5vbi1udWxs
IGp1c3QgY29weSBpdHMgaW1wbC4KKyAgICAgICAgLy8gKERvbid0IGNvcHkgaW4gdGhlIGNhc2Ug
b2YgbnVsbCBzbyB0aGF0IG51bGwgKyBudWxsID0gbnVsbCwgYnV0IGVtcHR5ICsgbnVsbCA9IGVt
cHR5KS4KKyAgICAgICAgaWYgKGlzRW1wdHkoKSAmJiAhc3RyaW5nLmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICBtX2ltcGwgPSBzdHJpbmcuaW1wbCgpOworICAgICAgICAgICAgbV9tdXRhYmxlSW1w
bCA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXBwZW5kKHN0cmluZy5jaGFyYWN0
ZXJzKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMpCisgICAgeworICAgICAgICBhcHBlbmQoY2hhcmFjdGVycywgY2hhcmFj
dGVycyA/IHN0cmxlbihjaGFyYWN0ZXJzKSA6IDApOworICAgIH0KKyAgICB2b2lkIGFwcGVuZChV
Q2hhciBjKSB7IGFwcGVuZCgmYywgMSk7IH0KKyAgICB2b2lkIGFwcGVuZChjaGFyIGMpIHsgYXBw
ZW5kKCZjLCAxKTsgfQorCisgICAgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7
CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hhciosIHVuc2lnbmVkKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIGFwcGVuZFVuaW5pdGlhbGl6ZWQodW5zaWduZWQsIFVDaGFyKiYpOworCisgICAgUmVm
UHRyPE11dGFibGVTdHJpbmdJbXBsPiBtX211dGFibGVJbXBsOworfTsKKworCisKKy8qCitjbGFz
cyBPdmVyY2FwYWNpdHlTdHJpbmdCdWlsZGVyIHsKKyAgICBPdmVyY2FwYWNpdHlTdHJpbmdCdWls
ZGVyKCkge30KKyAgICBPdmVyY2FwYWNpdHlTdHJpbmdCdWlsZGVyKGNvbnN0IGNoYXIqIHMpIDog
bV9zdHIocykge30KKyAgICBPdmVyY2FwYWNpdHlTdHJpbmdCdWlsZGVyKGNvbnN0IFN0cmluZyYg
cykgOiBtX3N0cihzKSB7fQorCisgICAgU3RyaW5nIGdldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICAgICAgLy8gU2VlIGNvbW1lbnQgaW4gY2hlY2tD
b25zaXN0ZW5jeSwgaW4gY2FzZXMgMSwgMiwgYW5kIDQgc3RyaW5nIGlzIGFscmVhZHkKKyAgICAg
ICAgLy8gdmFsaWQgaW4gbV9zdHIsIG5vdGhpbmcgdG8gZG8uICBJbiBjYXNlIDMgd2UgbXVzdCBy
ZXNvbHZlIHRoZSBzdHJpbmcuCisgICAgICAgIGlmIChtX3N0ci5pc051bGwoKSAmJiAhbV9idWZm
ZXIuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHVzZWRCdWZmZXJM
ZW5ndGgoKTsKKyAgICAgICAgICAgIG1fc3RyID0gKGxlbmd0aCA9PSBtX2J1ZmZlci5sZW5ndGgo
KSkgPyBtX2J1ZmZlciA6IFN0cmluZ0ltcGw6OmNyZWF0ZShtX2J1ZmZlci5pbXBsKCksIDAsIGxl
bmd0aCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdHI7CisgICAgfQorCisgICAg
T3ZlcmNhcGFjaXR5U3RyaW5nQnVpbGRlciYgb3BlcmF0b3IrPShjb25zdCBTdHJpbmcmIGFkZGVu
ZCkKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgICAgICAvLyBHZXQg
dGhlIHNpemUgdGhhdCB0aGUgc3RyaW5nIGN1cnJlbnRseSBpcywgdGhlIHNpemUgb2YgdGhlIGFk
ZGVuZCwKKyAgICAgICAgLy8gYW5kIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGhlIHR3by4KKyAg
ICAgICAgc2l6ZV90IGN1cnJlbnRTaXplID0gIW1fYnVmZmVyLmlzTnVsbCgpID8gdXNlZEJ1ZmZl
ckxlbmd0aCgpIDogbV9zdHIuc2l6ZSgpOworICAgICAgICBzaXplX3QgYWRkZW5kU2l6ZTsKKyAg
ICAgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IGN1cnJlbnRTaXplICsgYWRkZW5kU2l6ZTsKKyAg
ICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJmbG93LgorICAgICAgICBpZiAocmVxdWlyZWRTaXplIDwg
Y3VycmVudFNpemUpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IG1fYnVmZmVyIGlzIG5vbi1udWxsLCBhbmQgaGFzIHN1ZmZpY2llbnQgY2FwYWN0aXR5
IHRvIGhvbGQgYWRkZW5kLgorICAgICAgICBpZiAobV9idWZmZXIuaXNOdWxsKCkgfHwgKG1fd3Jp
dGVQb3NpdGlvbiArIGFkZGVuZFNpemUpID4gKG1fYnVmZmVyLmNoYXJhY3RlcnMoKSArIG1fYnVm
ZmVyLmxlbmd0aCgpKSkgeworICAgICAgICAgICAgLy8gIE5lZWQgdG8gYWxsb2NhdGUgbV9idWZm
ZXIuCisgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBjdXJyZW50U2l6ZSA8PCAx
OworICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25TaXplIDwgcmVxdWlyZWRTaXplKQorICAgICAg
ICAgICAgICAgIGFsbG9jYXRpb25TaXplID0gcmVxdWlyZWRTaXplOworICAgICAgICAgICAgaWYg
KGFsbG9jYXRpb25TaXplIDwgc19taW5pbXVtU2l6ZSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0
aW9uU2l6ZSA9IHNfbWluaW11bVNpemU7CisKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGN1cnJl
bnQgc3RyaW5nIGludG8gYSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgICAgU3Ry
aW5nIG5ld0J1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYWxsb2NhdGlv
blNpemUsIG1fd3JpdGVQb3NpdGlvbik7CisgICAgICAgICAgICBtZW1jcHkobV93cml0ZVBvc2l0
aW9uLCBtX2J1ZmZlci5pc051bGwoKSA/IG1fc3RyLmNoYXJhY3RlcnMoKSA6IG1fYnVmZmVyLmNo
YXJhY3RlcnMoKSwgY3VycmVudFNpemUgKiAyKTsKKyAgICAgICAgICAgIG1fd3JpdGVQb3NpdGlv
biArPSBjdXJyZW50U2l6ZTsKKyAgICAgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOworICAg
ICAgICB9CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgICAgICBBU1NFUlQoIW1f
YnVmZmVyLmlzTnVsbCgpKTsKKyAgICAgICAgbV9zdHIgPSBTdHJpbmcoKTsgLy8gbnVsbCBtX3N0
cjsgd2UncmUganVzdCB2YWxpZCBpbiBtX2J1ZmZlciBub3chCisKKyAgICAgICAgQVNTRVJUKCht
X3dyaXRlUG9zaXRpb24gKyBhZGRlbmRTaXplKSA8PSAobV9idWZmZXIuY2hhcmFjdGVycygpICsg
bV9idWZmZXIubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KG1fd3JpdGVQb3NpdGlvbiwgYWRk
ZW5kLmNoYXJhY3RlcnMoKSwgYWRkZW5kU2l6ZSAqIDIpOworICAgICAgICBtX3dyaXRlUG9zaXRp
b24gKz0gYWRkZW5kU2l6ZTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgdXNlZEJ1ZmZl
ckxlbmd0aCgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fYnVmZmVyLmlzTnVsbCgpKTsKKwor
ICAgICAgICBwdHJkaWZmX3QgcHRyZGlmZiA9IG1fd3JpdGVQb3NpdGlvbiAtIG1fYnVmZmVyLmNo
YXJhY3RlcnMoKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHB0cmRpZmYpOworICAgICAgICAvLyBUaGlzIHNob3VsZCBub3Qgb3ZlcmZsb3csIHNpbmNl
IHdlIGtub3cgbV93cml0ZVBvc2l0aW9uICppcyogYSBwb2ludGVyIGludG8gdGhlIGJ1ZmZlciEK
KyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSA9PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHB0cmRpZmYpKQorCisgICAgICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorCisg
ICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICAvLyBUaGUgc3RyaW5nIGNhbiBiZSBpbiBvbmUgb2YgNCBzdGF0ZXM6CisgICAgICAgIC8vICAg
ICAgICAgbV9zdHIgbV9idWZmZXIKKyAgICAgICAgLy8gICAgWzFdICAgIDAgICAgICAgMCAgICA6
IFN0cmluZyBpcyBuICAhMCAgICAgICAwICAgIDogU3RyaW5nIGlzIHZhbGlkIGluIG1fc3RyLCBu
byBvdmVyY2FwYWNpdHkgY3VycmVudGx5IGF2YWlsYWJsZS4KKyAgICAgICAgLy8gICAgWzNdICAg
IDAgICAgICAhMCAgICA6IFN0cmluZyBpcyB2YWxpZCBpbiBtX2J1ZmZlciwgbm90IGN1cnJlbnRs
eSByZXNvbHZlZCB0byBhIHN0cmluZy4gCisgICAgICAgIC8vICAgIFs0XSAgICEwICAgICAgITAg
ICAgOiBTdHJpbmcgZXhpc3RzIGluIGJvdGggbV9zdHIgQU5EIG1fYnVmZmVyLgorICAgICAgICAv
LyBJbiBlaXRoZXIgY2FzZSB3aGVyZSBhbiBhcHBlbmQgYnVmZmVyIGV4aXN0cyAoMyBvciA0KSBt
X3dyaXRlUG9zaXRpb24gbXVzdCBiZSB2YWxpZC4KKworICAgICAgICAvLyBDYXNlcyAxICYgMi4K
KyAgICAgICAgaWYgKG1fYnVmZmVyLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAvLyBDYXNlcyAzICYgNC4KKyAgICAgICAgQVNTRVJUKG1fd3JpdGVQb3NpdGlvbiA+PSBt
X2J1ZmZlci5jaGFyYWN0ZXJzKCkpOworICAgICAgICBBU1NFUlQobV93cml0ZVBvc2l0aW9uIDw9
IChtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX2J1ZmZlci5sZW5ndGgoKSkpOworICAgICAgICAv
LyBJbiBjYXNlIDQsIGNoZWNrIG1fd3JpdGVQb3NpdGlvbi4KKyAgICAgICAgQVNTRVJUKG1fc3Ry
LmlzTnVsbCgpIHx8IChtX2J1ZmZlci5jaGFyYWN0ZXJzKCkgKyBtX3N0ci5sZW5ndGgoKSkgPT0g
bV93cml0ZVBvc2l0aW9uKTsKKyNlbmRpZgorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc19taW5pbXVtU2l6ZSA9IDMyOworCisgICAgU3RyaW5nIG1fc3RyOworICAgIFN0cmluZyBt
X2J1ZmZlcjsKKyAgICBVQ2hhciogbV93cml0ZVBvc2l0aW9uOworfTsKKyovCisKKworCisKIH0K
IAogdXNpbmcgV1RGOjpDU3RyaW5nOwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw3ICs4NzgsNiBAQAog
CQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUJEMEVERjhGRDcw
MDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwICovOyB9OwogCQk0MTZFNzVDQjBFREY5MEM3
MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDOTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2Fs
bEZyYW1lLmggKi87IH07CiAJCTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07Ci0J
CTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEwMDgyMTVC
NiAvKiBTY3JpcHRTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0MTg4NUI5MzExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxODg1Qjkx
MTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxODg1Qjk0MTFCNkZEQTYwMDMzODNCQiAv
KiBGb3JtU3VibWlzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTg4NUI5MjExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3Bw
ICovOyB9OwogCQk0MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MThGODgw
MjBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgKi87IH07CkBAIC02OTA2
LDcgKzY5MDUsNiBAQAogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxT
dGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUM5MEVERjkwQzcw
MDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
NkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0
cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdHJpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE4ODVCOTExMUI2RkRBNjAwMzM4M0JCIC8q
IEZvcm1TdWJtaXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1T
dWJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxODg1QjkyMTFCNkZE
QTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb3JtU3VibWlzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxOEY4ODAyMEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWJzdHJhY3RXb3JrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY3NjMsNyArMTY3NjEsNiBAQAogCQkJ
CUNFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovLAog
CQkJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8sCiAJCQkJ
NDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8sCi0JCQkJNDE2RjQ1
RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovLAogCQkJCTkzNENDMERGMEVE
MzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0MwRTAwRUQzOUQ2
RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCiAJCQkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQw
RDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovLApAQCAtMjA1MDMsNyArMjA1MDAsNiBAQAogCQkJ
CTkzNENDMTBBMEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQzc2MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3Jp
cHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8q
IFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0Q0MwRTIwRUQzOUQ2RjAwQTY1
OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMjhDMjg0NTEwRDgyNTAw
MDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDQTNCRjY3
RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
MjExNTAsNyArMjExNDYsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlW
ZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJ
CQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlF
bmdsaXNoLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24g
NjkzNDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1Miw2ICs0NTIsMTMgQEAgSlNWYWx1ZSBqc1N0cmluZ09yTnVsbChFeGVjU3Rh
dGUqIGV4ZWMsIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAorSlNWYWx1ZSBq
c093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJu
IGpzT3duZWRTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5nKHMpKTsKK30KKwogSlNWYWx1ZSBq
c093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykKIHsK
ICAgICBpZiAocy5pc051bGwoKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
cmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgLy8gU2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQg
Zm9yIGFueSBVU3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCiAgICAgLy8g
b2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJp
bmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KKyAgICBKU0M6OkpTVmFsdWUg
anNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAKICAg
ICBKU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6VVN0cmluZyYpOyAKIAogICAgIFN0cmluZyBpZGVudGlmaWVyVG9TdHJpbmcoY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJl
cXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxI
dHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcg
KzEyOCw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKIEpTVmFs
dWUgSlNYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUZXh0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
IHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHRl
eHQgPSBpbXBsKCktPnJlc3BvbnNlVGV4dChlYyk7CisgICAgU3RyaW5nIHRleHQgPSBpbXBsKCkt
PnJlc3BvbnNlVGV4dChlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUoY29uc3QgVVN0cmluZyYgZnVuY3Rpb25O
YW1lLCBjb25zdCBVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQotICAgIDogbV9mdW5jdGlvbk5hbWUo
ZnVuY3Rpb25OYW1lKQorICAgIDogbV9mdW5jdGlvbk5hbWUodXN0cmluZ1RvU3RyaW5nKGZ1bmN0
aW9uTmFtZSkpCiAgICAgLCBtX3NvdXJjZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVzdHJpbmdUb1N0
cmluZyh1cmxTdHJpbmcpKQogICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCiB7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDY5MzQ2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJn
TGlzdC5oPgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVl
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01Myw3ICs1Miw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6VVN0cmluZyYg
ZnVuY3Rpb25OYW1lLCBjb25zdCBKU0M6OlVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1i
ZXIsIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpOwogICAgICAg
ICB+U2NyaXB0Q2FsbEZyYW1lKCk7CiAKLSAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nJiBmdW5j
dGlvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQorICAgICAgICBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25OYW1lOyB9
CiAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
VVJMOyB9CiAgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xp
bmVOdW1iZXI7IH0KIApAQCAtNjIsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5z
aXplKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNjcmlwdFN0cmluZyBtX2Z1bmN0aW9u
TmFtZTsKKyAgICAgICAgU3RyaW5nIG1fZnVuY3Rpb25OYW1lOwogICAgICAgICBLVVJMIG1fc291
cmNlVVJMOwogICAgICAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CiAKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBACiAKICNpbmNsdWRlICJTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0
ZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDYgQEAKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlNj
cmlwdFZhbHVlLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTIsMTEgKzUx
LDYgQEAgdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcgogICAgIG1fYXJn
dW1lbnRzLmFwcGVuZChhcmd1bWVudC5qc09iamVjdCgpKTsKIH0KIAotdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmIGFyZ3Vt
ZW50KQotewotICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50
LnVzdHJpbmcoKSkpOwotfQotCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVu
ZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFZhbHVlJiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoYXJndW1lbnQuanNWYWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3Jp
cHRWYWx1ZTsKLSAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAKICAgICBjbGFzcyBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXIoU2NyaXB0U3RhdGUqIHN0YXRlKSA6IG1fZXhlYyhzdGF0ZSkgeyB9CiAKICAgICAg
ICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmKTsKLSAgICAgICAgdm9p
ZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmKTsKICAgICAgICAgdm9pZCBhcHBl
bmRBcmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3Vt
ZW50KGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IGNo
YXIqKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaAkocmV2aXNpb24gNjkzNDYp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JpcHRTdHJpbmdfaAotI2RlZmluZSBTY3JpcHRT
dHJpbmdfaAotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KLSNpbmNsdWRlIDxydW50aW1l
L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFNjcmlwdFN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgU2NyaXB0U3Ry
aW5nKCkge30KLSAgICBTY3JpcHRTdHJpbmcoY29uc3QgY2hhciogcykgOiBtX3N0cihzKSB7fQot
ICAgIFNjcmlwdFN0cmluZyhjb25zdCBTdHJpbmcmIHMpIDogbV9zdHIoc3RyaW5nVG9VU3RyaW5n
KHMpKSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25zdCBKU0M6OlVTdHJpbmcmIHMpIDogbV9zdHIo
cykge30KLQotICAgIG9wZXJhdG9yIEpTQzo6VVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
OyB9Ci0gICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdXN0cmluZ1RvU3RyaW5n
KG1fc3RyKTsgfQotICAgIGNvbnN0IEpTQzo6VVN0cmluZyYgdXN0cmluZygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyOyB9Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLmlz
TnVsbCgpOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0ci5sZW5ndGgo
KTsgfQotCi0gICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciogcykKLSAgICB7
Ci0gICAgICAgIG1fc3RyID0gczsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAg
IFNjcmlwdFN0cmluZyYgb3BlcmF0b3IrPShjb25zdCBTdHJpbmcmIHMpCi0gICAgewotICAgICAg
ICBKU0M6OlN0cmluZ0J1aWxkZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYXBwZW5kKG1fc3Ry
KTsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChzdHJpbmdUb1VTdHJpbmcocykpOwotICAgICAgICBt
X3N0ciA9IGJ1ZmZlci5idWlsZCgpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNjcmlwdFN0cmluZyYgcykgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3N0ciA9PSBzLm1fc3RyOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTY3JpcHRTdHJpbmcmIHMpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBBdm9p
ZCBleHBvcnRpbmcgYW4gZXh0cmEgc3ltYm9sIGJ5IHJlLXVzaW5nICI9PSIgb3BlcmF0b3IuCi0g
ICAgICAgIHJldHVybiAhKG1fc3RyID09IHMubV9zdHIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBKU0M6OlVTdHJpbmcgbV9zdHI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBTY3JpcHRTdHJpbmdfaApJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2VuZGlmCiAgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmln
aW47Ci0gICAgY2xhc3MgU2NyaXB0U3RyaW5nOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAg
Y2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
LmNwcAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKQEAgLTU3LDEyICs1OCwxMiBAQCBGaWxlUmVh
ZGVyOjpGaWxlUmVhZGVyKFNjcmlwdEV4ZWN1dGlvbkNvCiAgICAgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCwgdGhpcykKICAgICAsIG1fc3RhdGUoTm9uZSkKICAgICAsIG1fcmVhZFR5cGUoUmVh
ZEZpbGVBc0JpbmFyeVN0cmluZykKLSAgICAsIG1fcmVzdWx0KCIiKQogICAgICwgbV9pc1Jhd0Rh
dGFDb252ZXJ0ZWQoZmFsc2UpCiAgICAgLCBtX2J5dGVzTG9hZGVkKDApCiAgICAgLCBtX3RvdGFs
Qnl0ZXMoMCkKICAgICAsIG1fbGFzdFByb2dyZXNzTm90aWZpY2F0aW9uVGltZU1TKDApCiB7Cisg
ICAgbV9idWlsZGVyLmFwcGVuZCgiIik7CiB9CiAKIEZpbGVSZWFkZXI6On5GaWxlUmVhZGVyKCkK
QEAgLTE0NCw3ICsxNDUsOCBAQCB2b2lkIEZpbGVSZWFkZXI6OmFib3J0KCkKIAogICAgIHRlcm1p
bmF0ZSgpOwogCi0gICAgbV9yZXN1bHQgPSAiIjsKKyAgICBtX2J1aWxkZXIuY2xlYXIoKTsKKyAg
ICBtX2J1aWxkZXIuYXBwZW5kKCIiKTsKICAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpjcmVhdGUo
QUJPUlRfRVJSKTsKIAogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CkBA
IC0yMTIsNyArMjE0LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBj
aAogCiAgICAgc3dpdGNoIChtX3JlYWRUeXBlKSB7CiAgICAgY2FzZSBSZWFkRmlsZUFzQmluYXJ5
U3RyaW5nOgotICAgICAgICBtX3Jlc3VsdCArPSBTdHJpbmcoZGF0YSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CisgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoZGF0YSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUmVhZEZpbGVBc1RleHQ6CiAgICAgY2FzZSBSZWFkRmlsZUFzRGF0YVVSTDoKQEAg
LTI5NiwzMCArMjk4LDMxIEBAIEZpbGVSZWFkZXI6OlJlYWR5U3RhdGUgRmlsZVJlYWRlcjo6cmVh
ZHkKICAgICByZXR1cm4gRU1QVFk7CiB9CiAKLWNvbnN0IFNjcmlwdFN0cmluZyYgRmlsZVJlYWRl
cjo6cmVzdWx0KCkKK1N0cmluZyBGaWxlUmVhZGVyOjpyZXN1bHQoKQogewogICAgIC8vIElmIHJl
YWRpbmcgYXMgYmluYXJ5IHN0cmluZywgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IGltbWVkaWF0
ZWx5LgogICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpCi0gICAg
ICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygp
OwogCiAgICAgLy8gSWYgd2UgYWxyZWFkeSBjb252ZXJ0IHRoZSByYXcgZGF0YSByZWNlaXZlZCBz
byBmYXIsIHdlIGNhbiByZXR1cm4gdGhlIHJlc3VsdCBub3cuCiAgICAgaWYgKG1faXNSYXdEYXRh
Q29udmVydGVkKQotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgICAgIHJldHVybiBtX2J1
aWxkZXIudG9TdHJpbmcoKTsKICAgICBtX2lzUmF3RGF0YUNvbnZlcnRlZCA9IHRydWU7CiAKICAg
ICBpZiAobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzVGV4dCkKICAgICAgICAgY29udmVydFRvVGV4
dCgpOwogICAgIC8vIEZvciBkYXRhIFVSTCwgd2Ugb25seSBkbyB0aGUgY292ZXJzaW9uIHVudGls
IHdlIHJlY2VpdmUgYWxsIHRoZSByYXcgZGF0YS4KICAgICBlbHNlIGlmIChtX3JlYWRUeXBlID09
IFJlYWRGaWxlQXNEYXRhVVJMICYmIG1fc3RhdGUgPT0gQ29tcGxldGVkKQotICAgICAgICBjb252
ZXJ0VG9EYXRhVVJMKG1fcmF3RGF0YSwgbV9maWxlVHlwZSwgbV9yZXN1bHQpOworICAgICAgICBj
b252ZXJ0VG9EYXRhVVJMKG1fcmF3RGF0YSwgbV9maWxlVHlwZSwgbV9idWlsZGVyKTsKIAotICAg
IHJldHVybiBtX3Jlc3VsdDsKKyAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
IHZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvVGV4dCgpCiB7CiAgICAgaWYgKCFtX3Jhd0RhdGEu
c2l6ZSgpKSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gIiI7CisgICAgICAgIG1fYnVpbGRlci5jbGVh
cigpOworICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKCIiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzMwLDI4ICszMzMsMzIgQEAgdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0
KCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgc3VwcG9ydGluZyBpbmNyZW1lbnRhbCBkZWNvZGlu
ZyB0byBpbXByb3ZlIHRoZSBwZXJmLgogICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICBtX2Rl
Y29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX2VuY29k
aW5nLmlzVmFsaWQoKSA/IG1fZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSk7Ci0gICAgbV9yZXN1
bHQgPSBtX2RlY29kZXItPmRlY29kZSgmbV9yYXdEYXRhLmF0KDApLCBtX3Jhd0RhdGEuc2l6ZSgp
KTsKKyAgICBtX2J1aWxkZXIuY2xlYXIoKTsKKyAgICBtX2J1aWxkZXIuYXBwZW5kKCIiKTsKKyAg
ICBtX2J1aWxkZXIuYXBwZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKCZtX3Jhd0RhdGEuYXQoMCksIG1f
cmF3RGF0YS5zaXplKCkpKTsKIAogICAgIGlmIChtX3N0YXRlID09IENvbXBsZXRlZCAmJiAhbV9l
cnJvcikKLSAgICAgICAgbV9yZXN1bHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOworICAgICAgICBt
X2J1aWxkZXIuYXBwZW5kKG1fZGVjb2Rlci0+Zmx1c2goKSk7CiB9CiAKLXZvaWQgRmlsZVJlYWRl
cjo6Y29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0
cmluZyYgZmlsZVR5cGUsIFNjcmlwdFN0cmluZyYgcmVzdWx0KQordm9pZCBGaWxlUmVhZGVyOjpj
b252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5n
JiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKIHsKLSAgICByZXN1bHQgPSAiZGF0
YToiOworICAgIGJ1aWxkZXIuY2xlYXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiZGF0YToiKTsK
IAogICAgIGlmICghcmF3RGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlc3Vs
dCArPSBmaWxlVHlwZTsKLSAgICBpZiAoIWZpbGVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmVz
dWx0ICs9ICI7IjsKLSAgICByZXN1bHQgKz0gImJhc2U2NCwiOworICAgIGlmICghZmlsZVR5cGUu
aXNFbXB0eSgpKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpbGVUeXBlKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoIjtiYXNlNjQsIik7CisgICAgfSBlbHNlCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJiYXNlNjQsIik7CiAKICAgICBWZWN0b3I8Y2hhcj4gb3V0OwogICAgIGJhc2U2NEVu
Y29kZShyYXdEYXRhLCBvdXQpOwogICAgIG91dC5hcHBlbmQoJ1wwJyk7Ci0gICAgcmVzdWx0ICs9
IG91dC5kYXRhKCk7CisgICAgYnVpbGRlci5hcHBlbmQob3V0LmRhdGEoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gNjkzNDYp
CisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBACiAjaW5jbHVkZSAiRmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCisjaW5j
bHVkZSAiU3RyaW5nQnVpbGRlci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNzcsMTEgKzc3LDExIEBAIHB1YmxpYzoKIAogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJuIG1f
ZXJyb3I7IH0KLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlc3VsdCgpOworICAgIFN0cmluZyBy
ZXN1bHQoKTsKIAogICAgIC8vIEhlbHBlciBtZXRob2RzLCBhbHNvIHVzZWQgYnkgRmlsZVJlYWRl
clN5bmMuCiAgICAgc3RhdGljIEV4Y2VwdGlvbkNvZGUgaHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlv
bkNvZGUoaW50IGh0dHBTdGF0dXNDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VG9EYXRh
VVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwg
U2NyaXB0U3RyaW5nJiByZXN1bHQpOworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRUb0RhdGFVUkwo
Y29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhLCBjb25zdCBTdHJpbmcmIGZpbGVUeXBlLCBTdHJp
bmdCdWlsZGVyJik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU3VzcGVuZCgpIGNvbnN0OwpAQCAtMTQ3LDEzICsxNDcsNyBAQCBwcml2YXRlOgogICAgIFJl
YWRUeXBlIG1fcmVhZFR5cGU7CiAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CiAKLSAgICAv
LyBMaWtlIFhNTEh0dHBSZXF1ZXN0Lm1fcmVzcG9uc2VUZXh0LCB3ZSBrZWVwIHRoaXMgYXMgYSBT
Y3JpcHRTdHJpbmcsIG5vdCBhIFdURjo6U3RyaW5nLgotICAgIC8vIFRoYXQncyBiZWNhdXNlIHRo
ZXNlIHN0cmluZ3MgY2FuIGVhc2lseSBnZXQgaHVnZSAodGhleSBhcmUgZmlsbGVkIGZyb20gdGhl
IGZpbGUpIGFuZAotICAgIC8vIGJlY2F1c2UgSlMgY2FuIGVhc2lseSBvYnNlcnZlIG1hbnkgaW50
ZXJtZWRpYXRlIHN0YXRlcywgc28gaXQncyB2ZXJ5IHVzZWZ1bCB0byBiZQotICAgIC8vIGFibGUg
dG8gc2hhcmUgdGhlIGJ1ZmZlciB3aXRoIEphdmFTY3JpcHQgdmVyc2lvbnMgb2YgdGhlIHdob2xl
IG9yIHBhcnRpYWwgc3RyaW5nLgotICAgIC8vIEluIGNvbnRyYXN0LCB0aGlzIHN0cmluZyBkb2Vz
bid0IGludGVyYWN0IG11Y2ggd2l0aCB0aGUgcmVzdCBvZiB0aGUgZW5naW5lIHNvIGl0J3Mgbm90
IHRoYXQKLSAgICAvLyBiaWcgYSBjb3N0IHRoYXQgaXQgaXNuJ3QgYSBTdHJpbmcuCi0gICAgU2Ny
aXB0U3RyaW5nIG1fcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwogCiAgICAg
Ly8gVGhlIHJhdyBkYXRhLiBXZSBoYXZlIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSByYXcgZGF0
YSBmb3IgaXQgdG8gYmUgY29udmVydGVkIHRvIHRleHQgb3IgZGF0YSBVUkwgZGF0YS4KICAgICBW
ZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJT
eW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3Bw
CShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJCbG9iVVJMLmgiCiAj
aW5jbHVkZSAiRmlsZVJlYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgpAQCAtNTAsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBG
aWxlUmVhZGVyU3luY0xvYWRlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKIHB1
YmxpYzoKICAgICAvLyBJZiB0aGUgb3V0cHV0IHJlc3VsdCBpcyBwcm92aWRlZCwgdXNlIGl0LiBP
dGhlcndpc2UsIHNhdmUgaXQgYXMgdGhlIHJhdyBkYXRhLgotICAgIEZpbGVSZWFkZXJTeW5jTG9h
ZGVyKFNjcmlwdFN0cmluZyogcmVzdWx0KTsKKyAgICBGaWxlUmVhZGVyU3luY0xvYWRlcihTdHJp
bmdCdWlsZGVyKik7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBodHRwIHN0YXR1cyBjb2RlLgogICAg
IHZvaWQgc3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTY1LDcgKzY2LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIC8vIFRoZSBvdXRwdXQgcmVzdWx0LiBUaGUgY2FsbGVyIHByb3ZpZGVzIHRoaXMgaW4g
b3JkZXIgdG8gbG9hZCB0aGUgYmluYXJ5IGRhdGEgZGlyZWN0bHkuCi0gICAgU2NyaXB0U3RyaW5n
KiBtX3Jlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyKiBtX2J1aWxkZXI7CiAKICAgICAvLyBUaGUg
cmF3IGRhdGEuIFRoZSBjYWxsZXIgZG9lcyBub3QgcHJvdmlkZSB0aGUgYWJvdmUgb3V0cHV0IHJl
c3VsdCBhbmQgd2UgbmVlZCB0byBzYXZlIGl0IGhlcmUuCiAgICAgVmVjdG9yPGNoYXI+IG1fcmF3
RGF0YTsKQEAgLTczLDggKzc0LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9odHRwU3RhdHVzQ29k
ZTsgICAgCiB9OwogCi1GaWxlUmVhZGVyU3luY0xvYWRlcjo6RmlsZVJlYWRlclN5bmNMb2FkZXIo
U2NyaXB0U3RyaW5nKiByZXN1bHQpCi0gICAgOiBtX3Jlc3VsdChyZXN1bHQpCitGaWxlUmVhZGVy
U3luY0xvYWRlcjo6RmlsZVJlYWRlclN5bmNMb2FkZXIoU3RyaW5nQnVpbGRlciogYnVpbGRlcikK
KyAgICA6IG1fYnVpbGRlcihidWlsZGVyKQogICAgICwgbV9odHRwU3RhdHVzQ29kZSgwKQogewog
fQpAQCAtMTAwLDggKzEwMSw4IEBAIHZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZFJlY2Vp
dmVSZXMKIAogdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewotICAgIGlmIChtX3Jlc3VsdCkKLSAg
ICAgICAgKm1fcmVzdWx0ICs9IFN0cmluZyhkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVu
Z3RoUmVjZWl2ZWQpKTsKKyAgICBpZiAobV9idWlsZGVyKQorICAgICAgICBtX2J1aWxkZXItPmFw
cGVuZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKICAgICBl
bHNlCiAgICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxlbmd0aFJlY2VpdmVkKSk7CiB9CkBAIC0xMTcsMzYgKzExOCwzNiBAQCB2b2lkIEZpbGVSZWFk
ZXJTeW5jTG9hZGVyOjpkaWRGYWlsKGNvbnN0CiB9CiAKIEZpbGVSZWFkZXJTeW5jOjpGaWxlUmVh
ZGVyU3luYygpCi0gICAgOiBtX3Jlc3VsdCgiIikKIHsKKyAgICBtX2J1aWxkZXIuYXBwZW5kKCIi
KTsKIH0KIAotY29uc3QgU2NyaXB0U3RyaW5nJiBGaWxlUmVhZGVyU3luYzo6cmVhZEFzQmluYXJ5
U3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJs
b2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEZpbGVSZWFkZXJTeW5jOjpyZWFk
QXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFibG9iKQot
ICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJp
bmcoKTsKIAogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwgUmVhZEFzQmlu
YXJ5U3RyaW5nLCBlYyk7Ci0gICAgcmV0dXJuIG1fcmVzdWx0OworICAgIHJldHVybiBtX2J1aWxk
ZXIudG9TdHJpbmcoKTsKIH0KIAotY29uc3QgU2NyaXB0U3RyaW5nJiBGaWxlUmVhZGVyU3luYzo6
cmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBCbG9iKiBibG9iLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJiBlYykK
K1N0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWJsb2IpCi0gICAgICAgIHJldHVy
biBtX3Jlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogCiAgICAg
bV9lbmNvZGluZyA9IGVuY29kaW5nOwogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
YmxvYiwgUmVhZEFzVGV4dCwgZWMpOwotICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICByZXR1cm4g
bV9idWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWNvbnN0IFNjcmlwdFN0cmluZyYgRmlsZVJlYWRl
clN5bmM6OnJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgRmlsZVJl
YWRlclN5bmM6OnJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYg
KCFibG9iKQotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgICAgIHJldHVybiBtX2J1aWxk
ZXIudG9TdHJpbmcoKTsKIAogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwg
UmVhZEFzRGF0YVVSTCwgZWMpOwotICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICByZXR1cm4gbV9i
dWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgUmVh
ZFR5cGUgcmVhZFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU4LDcgKzE1OSw3IEBAIHZv
aWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW8KICAgICBSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdCh1cmxGb3JSZWFkaW5nKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdF
VCIpOwogCi0gICAgRmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFk
QXNCaW5hcnlTdHJpbmcpID8gJm1fcmVzdWx0IDogMCk7CisgICAgRmlsZVJlYWRlclN5bmNMb2Fk
ZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJpbmcpID8gJm1fYnVpbGRlciA6
IDApOwogICAgIGxvYWRlci5zdGFydChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCBl
Yyk7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsRm9y
UmVhZGluZyk7CiAgICAgaWYgKGVjKQpAQCAtMTY5LDE3ICsxNzAsMTcgQEAgdm9pZCBGaWxlUmVh
ZGVyU3luYzo6cmVhZChTY3JpcHRFeGVjdXRpbwogICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIHNp
bmNlIHdlIG5lZWQgbm8gY29udmVyc2lvbi4KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgUmVh
ZEFzVGV4dDoKLSAgICAgICAgY29udmVydFRvVGV4dChsb2FkZXIucmF3RGF0YSgpLmRhdGEoKSwg
bG9hZGVyLnJhd0RhdGEoKS5zaXplKCksIG1fcmVzdWx0KTsKKyAgICAgICAgY29udmVydFRvVGV4
dChsb2FkZXIucmF3RGF0YSgpLmRhdGEoKSwgbG9hZGVyLnJhd0RhdGEoKS5zaXplKCksIG1fYnVp
bGRlcik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFJlYWRBc0RhdGFVUkw6Ci0gICAgICAg
IEZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwobG9hZGVyLnJhd0RhdGEoKSwgYmxvYi0+dHlw
ZSgpLCBtX3Jlc3VsdCk7CisgICAgICAgIEZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwobG9h
ZGVyLnJhd0RhdGEoKSwgYmxvYi0+dHlwZSgpLCBtX2J1aWxkZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgRmlsZVJlYWRl
clN5bmM6OmNvbnZlcnRUb1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFNjcmlwdFN0
cmluZyYgcmVzdWx0KQordm9pZCBGaWxlUmVhZGVyU3luYzo6Y29udmVydFRvVGV4dChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBpZiAo
IXNpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTE5MCw4ICsxOTEsMTAgQEAgdm9pZCBGaWxlUmVh
ZGVyU3luYzo6Y29udmVydFRvVGV4dChjb25zdAogICAgIC8vIHByb3ZpZGVkIGVuY29kaW5nLiAg
ICAgCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIHN1cHBvcnRpbmcgaW5jcmVtZW50YWwgZGVjb2Rp
bmcgdG8gaW1wcm92ZSB0aGUgcGVyZi4KICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4g
ZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsIG1fZW5j
b2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0RW5jb2RpbmcobV9lbmNvZGlu
ZykpOwotICAgIHJlc3VsdCA9IGRlY29kZXItPmRlY29kZShkYXRhLCBzaXplKTsKLSAgICByZXN1
bHQgKz0gZGVjb2Rlci0+Zmx1c2goKTsKKyAgICBidWlsZGVyLmNsZWFyKCk7CisgICAgYnVpbGRl
ci5hcHBlbmQoIiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRlY29kZXItPmRlY29kZShkYXRhLCBz
aXplKSk7CisgICAgYnVpbGRlci5hcHBlbmQoZGVjb2Rlci0+Zmx1c2goKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCShyZXZpc2lv
biA2OTM0NikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaWYgRU5BQkxFKEJMT0IpCiAKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5n
QnVpbGRlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIApAQCAtNTIsMTMgKzUyLDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fkZpbGVSZWFkZXJTeW5jKCkgeyB9CiAKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlYWRBc0Jp
bmFyeVN0cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCisgICAgU3RyaW5nIHJlYWRBc0JpbmFyeVN0cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgcmVhZEFzVGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICB7CiAgICAgICAgIHJldHVybiByZWFkQXNUZXh0KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGJsb2IsICIiLCBlYyk7CiAgICAgfQotICAgIGNvbnN0IFNjcmlwdFN0
cmluZyYgcmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIGNvbnN0IFN0
cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcm
IHJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJs
b2IqLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5n
IHJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25D
b2RlJik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBSZWFkVHlwZSB7CkBAIC02OCwxNyArNjgsMTEg
QEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRmlsZVJlYWRlclN5bmMoKTsKLSAgICAKKwogICAg
IHZvaWQgcmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIFJlYWRUeXBlLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCBjb252ZXJ0VG9UZXh0KGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBzaXplLCBTY3JpcHRTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCBjb252ZXJ0VG9UZXh0KGNv
bnN0IGNoYXIqIGRhdGEsIGludCBzaXplLCBTdHJpbmdCdWlsZGVyJik7CiAKLSAgICAvLyBMaWtl
IFhNTEh0dHBSZXF1ZXN0Lm1fcmVzcG9uc2VUZXh0LCB3ZSBrZWVwIHRoaXMgYXMgYSBTY3JpcHRT
dHJpbmcsIG5vdCBhIFdURjo6U3RyaW5nLgotICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZXNlIHN0
cmluZ3MgY2FuIGVhc2lseSBnZXQgaHVnZSAodGhleSBhcmUgZmlsbGVkIGZyb20gdGhlIGZpbGUp
IGFuZAotICAgIC8vIGJlY2F1c2UgSlMgY2FuIGVhc2lseSBvYnNlcnZlIG1hbnkgaW50ZXJtZWRp
YXRlIHN0YXRlcywgc28gaXQncyB2ZXJ5IHVzZWZ1bCB0byBiZQotICAgIC8vIGFibGUgdG8gc2hh
cmUgdGhlIGJ1ZmZlciB3aXRoIEphdmFTY3JpcHQgdmVyc2lvbnMgb2YgdGhlIHdob2xlIG9yIHBh
cnRpYWwgc3RyaW5nLgotICAgIC8vIEluIGNvbnRyYXN0LCB0aGlzIHN0cmluZyBkb2Vzbid0IGlu
dGVyYWN0IG11Y2ggd2l0aCB0aGUgcmVzdCBvZiB0aGUgZW5naW5lIHNvIGl0J3Mgbm90IHRoYXQK
LSAgICAvLyBiaWcgYSBjb3N0IHRoYXQgaXQgaXNuJ3QgYSBTdHJpbmcuCi0gICAgU2NyaXB0U3Ry
aW5nIG1fcmVzdWx0OworICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwogCiAgICAgU3RyaW5n
IG1fZW5jb2Rpbmc7CiB9OwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDYgQEAKICNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKICNpbmNsdWRl
ICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgpAQCAtMTEzMiw3ICsxMTMxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRGYWlsTG9hZGluZwogICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0
KG1fZnJvbnRlbmQuZ2V0KCkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291
cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcikKK3ZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKQogewog
ICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMTYyLDcgKzExNjEsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdEltcG9ydGVkCiAgICAgaWYgKCFyZXNv
dXJjZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVzb3VyY2UtPnNldE92ZXJyaWRlQ29udGVu
dChTY3JpcHRTdHJpbmcoc291cmNlU3RyaW5nKSwgSW5zcGVjdG9yUmVzb3VyY2U6OlNjcmlwdCk7
CisgICAgcmVzb3VyY2UtPnNldE92ZXJyaWRlQ29udGVudChzb3VyY2VTdHJpbmcsIEluc3BlY3Rv
clJlc291cmNlOjpTY3JpcHQpOwogCiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIHJlc291
cmNlLT51cGRhdGVTY3JpcHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNiBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsK
IGNsYXNzIFNjcmlwdENhbGxTdGFjazsKIGNsYXNzIFNjcmlwdFByb2ZpbGU7Ci1jbGFzcyBTY3Jp
cHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdG9yYWdlOwogY2xhc3MgU3Rv
cmFnZUFyZWE7CkBAIC0xNzMsNyArMTcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2
ZUNvbnRlbnRMZW5ndGgodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2
ZWQpOwogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgcmVzb3VyY2VS
ZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
U2NyaXB0U3RyaW5nJiBzb3VyY2VTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKTsKKyAgICB2b2lkIHJlc291cmNl
UmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBz
ZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcik7CiAgICAgdm9pZCBzY3JpcHRJbXBvcnRl
ZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nKTsK
IAogICAgIHZvaWQgc2V0UmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKSW5k
ZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDY5MzQ2
KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MTEsNyArNDExLDcgQEAgSW5zcGVjdG9yUmVzb3VyY2U6OlR5cGUgSW5zcGVjdG9y
UmVzb3VyYwogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZVR5cGUoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JSZXNvdXJjZTo6c2V0T3ZlcnJpZGVDb250ZW50KGNvbnN0IFNjcmlwdFN0cmluZyYgZGF0
YSwgVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6c2V0T3ZlcnJpZGVDb250ZW50
KGNvbnN0IFN0cmluZyYgZGF0YSwgVHlwZSB0eXBlKQogewogICAgIG1fb3ZlcnJpZGVDb250ZW50
ID0gZGF0YTsKICAgICBtX292ZXJyaWRlQ29udGVudFR5cGUgPSB0eXBlOwpJbmRleDogV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDYgQEAKIAogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0j
aW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlUmVx
dWVzdC5oIgogI2luY2x1ZGUgIldlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlLmgiCiAKQEAgLTk4
LDcgKzk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVwZGF0ZVdlYlNv
Y2tldFJlc3BvbnNlKGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlJik7CiAjZW5kaWYK
IAotICAgICAgICB2b2lkIHNldE92ZXJyaWRlQ29udGVudChjb25zdCBTY3JpcHRTdHJpbmcmIGRh
dGEsIFR5cGUpOworICAgICAgICB2b2lkIHNldE92ZXJyaWRlQ29udGVudChjb25zdCBTdHJpbmcm
IGRhdGEsIFR5cGUpOwogCiAgICAgICAgIFN0cmluZyBzb3VyY2VTdHJpbmcoKSBjb25zdDsKICAg
ICAgICAgU3RyaW5nIHNvdXJjZUJ5dGVzKCkgY29uc3Q7CkBAIC0xOTQsNyArMTkzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX2Nvbm5lY3Rpb25JRDsKICAgICAg
ICAgYm9vbCBtX2Nvbm5lY3Rpb25SZXVzZWQ7CiAgICAgICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRU
aW1pbmc+IG1fbG9hZFRpbWluZzsKLSAgICAgICAgU2NyaXB0U3RyaW5nIG1fb3ZlcnJpZGVDb250
ZW50OworICAgICAgICBTdHJpbmcgbV9vdmVycmlkZUNvbnRlbnQ7CiAgICAgICAgIFR5cGUgbV9v
dmVycmlkZUNvbnRlbnRUeXBlOwogICAgICAgICBDaGFuZ2VzIG1fY2hhbmdlczsKICAgICAgICAg
Ym9vbCBtX2lzTWFpblJlc291cmNlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNp
b24gNjkzNDYpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDYgQEAKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0j
aW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw2IEBAIGNs
YXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFJlc291cmNl
UmVzcG9uc2U7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwotY2xhc3MgU2NyaXB0U3RyaW5nOwog
Y2xhc3MgU2NyaXB0VmFsdWU7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNp
b24gNjkzNDYpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBS
ZXNvdXJjZUxvYWRlcjsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKLSAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAgICAgY2xhc3MgU2VjdXJp
dHlPcmlnaW47CiAgICAgY2xhc3MgU2hhcmVkQnVmZmVyOwogICAgIGNsYXNzIFN1YnN0aXR1dGVE
YXRhOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5oCShyZXZpc2lvbiA2
OTM0NikKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDYgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBSZXNvdXJjZUVycm9y
OwogY2xhc3MgUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotY2xhc3Mg
U2NyaXB0U3RyaW5nOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogCiBjbGFzcyBSZXNvdXJjZUxv
YWROb3RpZmllciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTYg
QEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgU3RyaW5nJgogICAgICAgICBtX3N0
cmluZ3MuYXBwZW5kKHN0cmluZyk7CiB9CiAKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgYXBwZW5kKFN0
cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKK30KKwordm9pZCBTdHJpbmdCdWlsZGVyOjphcHBl
bmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGFwcGVu
ZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSk7Cit9CisKIHZvaWQgU3RyaW5nQnVpbGRlcjo6
YXBwZW5kKFVDaGFyIGMpCiB7CiAgICAgdW5zaWduZWQgdG90YWxMZW5ndGggPSBsZW5ndGgoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gNjkzNDYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVkKTsKKyAg
ICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiwgdW5zaWduZWQpOwogICAgIHZvaWQgYXBwZW5kKFVD
aGFyKTsKICAgICB2b2lkIGFwcGVuZChjaGFyKTsKICAgICAKQEAgLTU5LDYgKzYxLDkgQEAgcHVi
bGljOgogCiAgICAgU3RyaW5nIHRvU3RyaW5nKENvbmNhdE1vZGUgbW9kZSA9IENvbmNhdFVuYWx0
ZXJlZCkgY29uc3Q7CiAKKyAgICBTdHJpbmcgaW50ZXJpbVN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHRvU3RyaW5nKCk7IH0KKyAgICB2b2lkIHNocmlua1RvRml0KCkgeyB9CisKIHByaXZhdGU6CiAg
ICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsTGVuZ3RoID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsgfQogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtl
clNjcmlwdExvYWRlci5oCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNs
dWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
CShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIFhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVx
dWVzdChTY3JpcHRFeGUKICAgICAsIG1fYXNCbG9iKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3N0
YXRlKFVOU0VOVCkKLSAgICAsIG1fcmVzcG9uc2VUZXh0KCIiKQogICAgICwgbV9jcmVhdGVkRG9j
dW1lbnQoZmFsc2UpCiAgICAgLCBtX2Vycm9yKGZhbHNlKQogICAgICwgbV91cGxvYWRFdmVudHNB
bGxvd2VkKHRydWUpCkBAIC0xODUsNiArMTg0LDcgQEAgWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBS
ZXF1ZXN0KFNjcmlwdEV4ZQogICAgICwgbV9leGNlcHRpb25Db2RlKDApCiAgICAgLCBtX3Byb2dy
ZXNzRXZlbnRUaHJvdHRsZSh0aGlzKQogeworICAgIG1fcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgi
Iik7CiAgICAgaW5pdGlhbGl6ZVhNTEh0dHBSZXF1ZXN0U3RhdGljRGF0YSgpOwogI2lmbmRlZiBO
REVCVUcKICAgICB4bWxIdHRwUmVxdWVzdENvdW50ZXIuaW5jcmVtZW50KCk7CkBAIC0yMjYsNyAr
MjI2LDcgQEAgWE1MSHR0cFJlcXVlc3Q6OlN0YXRlIFhNTEh0dHBSZXF1ZXN0OjpyZQogICAgIHJl
dHVybiBtX3N0YXRlOwogfQogCi1jb25zdCBTY3JpcHRTdHJpbmcmIFhNTEh0dHBSZXF1ZXN0Ojpy
ZXNwb25zZVRleHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitTdHJpbmcgWE1MSHR0cFJlcXVl
c3Q6OnJlc3BvbnNlVGV4dChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICNpZiBFTkFCTEUo
WEhSX1JFU1BPTlNFX0JMT0IpCiAgICAgaWYgKG1fYXNCbG9iKQpAQCAtMjM0LDcgKzIzNCw3IEBA
IGNvbnN0IFNjcmlwdFN0cmluZyYgWE1MSHR0cFJlcXVlc3Q6OnJlc3AKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGVjKTsKICNlbmRpZgotICAgIHJldHVybiBtX3Jlc3BvbnNlVGV4dDsKKyAgICBy
ZXR1cm4gbV9yZXNwb25zZUJ1aWxkZXIuaW50ZXJpbVN0cmluZygpOwogfQogCiBEb2N1bWVudCog
WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApAQCAt
MjU5LDcgKzI1OSw3IEBAIERvY3VtZW50KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoRXgK
ICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIG1fdXJsKTsK
ICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPm9wZW4oKTsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBTZXQgTGFzdC1Nb2RpZmllZC4KLSAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPndyaXRlKFN0
cmluZyhtX3Jlc3BvbnNlVGV4dCkpOworICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+d3JpdGUo
bV9yZXNwb25zZUJ1aWxkZXIuaW50ZXJpbVN0cmluZygpKTsKICAgICAgICAgICAgIG1fcmVzcG9u
c2VYTUwtPmZpbmlzaFBhcnNpbmcoKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmNsb3Nl
KCk7CiAKQEAgLTYyNyw3ICs2MjcsOCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAK
ICAgICBpbnRlcm5hbEFib3J0KCk7CiAKLSAgICBtX3Jlc3BvbnNlVGV4dCA9ICIiOworICAgIG1f
cmVzcG9uc2VCdWlsZGVyLmNsZWFyKCk7CisgICAgbV9yZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCIi
KTsKICAgICBtX2NyZWF0ZWREb2N1bWVudCA9IGZhbHNlOwogICAgIG1fcmVzcG9uc2VYTUwgPSAw
OwogI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKQEAgLTY3Niw3ICs2NzcsOCBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjppbnRlcm5hbEFib3J0KCkKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNs
ZWFyUmVzcG9uc2UoKQogewogICAgIG1fcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7Ci0g
ICAgbV9yZXNwb25zZVRleHQgPSAiIjsKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5jbGVhcigpOwor
ICAgIG1fcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiIik7CiAgICAgbV9jcmVhdGVkRG9jdW1lbnQg
PSBmYWxzZTsKICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICNpZiBFTkFCTEUoWEhSX1JFU1BPTlNF
X0JMT0IpCkBAIC03MzMsNyArNzM1LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3Rl
Y3Rpb24oKQogICAgIC8vIHJlcG9ydCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0IHBvaW50LgogICAg
IEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5nbG9iYWxEYXRhKCk7CiAgICAgaWYgKGhhc0NhY2hlZERPTU9iamVjdFdyYXBwZXIoZ2xvYmFs
RGF0YSwgdGhpcykpCi0gICAgICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KG1fcmVzcG9uc2VUZXh0LnNpemUoKSAqIDIpOworICAgICAgICBnbG9iYWxEYXRhLT5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlQnVpbGRlci5sZW5ndGgoKSAqIDIpOwog
I2VuZGlmCiAKICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKQEAgLTk0Miw3ICs5NDQs
OSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKHVuCiAgICAgICAgIGNo
YW5nZVN0YXRlKEhFQURFUlNfUkVDRUlWRUQpOwogCiAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAg
ICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOworICAgICAgICBtX3Jlc3Bv
bnNlQnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5mbHVzaCgpKTsKKworICAgIG1fcmVzcG9uc2VC
dWlsZGVyLnNocmlua1RvRml0KCk7CiAKICNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCiAg
ICAgLy8gRklYTUU6IFNldCBtX3Jlc3BvbnNlQmxvYiB0byBzb21ldGhpbmcgaGVyZSBpbiB0aGUg
bV9hc0Jsb2IgY2FzZS4KQEAgLTk1MCw3ICs5NTQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nKHVuCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgaW5zcGVjdG9yLT5yZXNvdXJjZVJldHJpZXZl
ZEJ5WE1MSHR0cFJlcXVlc3QoaWRlbnRpZmllciwgbV9yZXNwb25zZVRleHQsIG1fdXJsLCBtX2xh
c3RTZW5kVVJMLCBtX2xhc3RTZW5kTGluZU51bWJlcik7CisgICAgICAgIGluc3BlY3Rvci0+cmVz
b3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGlkZW50aWZpZXIsIG1fcmVzcG9uc2VCdWls
ZGVyLmludGVyaW1TdHJpbmcoKSwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5l
TnVtYmVyKTsKICNlbmRpZgogCiAgICAgYm9vbCBoYWRMb2FkZXIgPSBtX2xvYWRlcjsKQEAgLTEw
MTksNyArMTAyMyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnMK
ICAgICBpZiAobGVuID09IC0xKQogICAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7CiAKLSAgICBt
X3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4pOworICAgIG1fcmVz
cG9uc2VCdWlsZGVyLmFwcGVuZChtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4pKTsKIAogICAg
IGlmICghbV9lcnJvcikgewogICAgICAgICBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGggPSBtX3Jl
c3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShy
ZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUg
IlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKICNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC04OSw3ICs4OSw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIG92ZXJyaWRlTWltZVR5cGUoY29uc3QgU3RyaW5nJiBvdmVy
cmlkZSk7CiAgICAgU3RyaW5nIGdldEFsbFJlc3BvbnNlSGVhZGVycyhFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CiAgICAgU3RyaW5nIGdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgcmVz
cG9uc2VUZXh0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBTdHJpbmcgcmVzcG9uc2VUZXh0
KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBEb2N1bWVudCogcmVzcG9uc2VYTUwoRXhjZXB0
aW9uQ29kZSYpIGNvbnN0OwogI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKICAgICBCbG9i
KiByZXNwb25zZUJsb2IoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwpAQCAtMTc2LDEzICsxNzYsNyBA
QCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsK
IAotICAgIC8vIFVubGlrZSBtb3N0IHN0cmluZ3MgaW4gdGhlIERPTSwgd2Uga2VlcCB0aGlzIGFz
IGEgU2NyaXB0U3RyaW5nLCBub3QgYSBXVEY6OlN0cmluZy4KLSAgICAvLyBUaGF0J3MgYmVjYXVz
ZSB0aGVzZSBzdHJpbmdzIGNhbiBlYXNpbHkgZ2V0IGh1Z2UgKHRoZXkgYXJlIGZpbGxlZCBmcm9t
IHRoZSBuZXR3b3JrIHdpdGgKLSAgICAvLyBubyBwYXJzaW5nKSBhbmQgYmVjYXVzZSBKUyBjYW4g
ZWFzaWx5IG9ic2VydmUgbWFueSBpbnRlcm1lZGlhdGUgc3RhdGVzLCBzbyBpdCdzIHZlcnkgdXNl
ZnVsCi0gICAgLy8gdG8gYmUgYWJsZSB0byBzaGFyZSB0aGUgYnVmZmVyIHdpdGggSmF2YVNjcmlw
dCB2ZXJzaW9ucyBvZiB0aGUgd2hvbGUgb3IgcGFydGlhbCBzdHJpbmcuCi0gICAgLy8gSW4gY29u
dHJhc3QsIHRoaXMgc3RyaW5nIGRvZXNuJ3QgaW50ZXJhY3QgbXVjaCB3aXRoIHRoZSByZXN0IG9m
IHRoZSBlbmdpbmUgc28gaXQncyBub3QgdGhhdAotICAgIC8vIGJpZyBhIGNvc3QgdGhhdCBpdCBp
c24ndCBhIFN0cmluZy4KLSAgICBTY3JpcHRTdHJpbmcgbV9yZXNwb25zZVRleHQ7CisgICAgU3Ry
aW5nQnVpbGRlciBtX3Jlc3BvbnNlQnVpbGRlcjsKICAgICBtdXRhYmxlIGJvb2wgbV9jcmVhdGVk
RG9jdW1lbnQ7CiAgICAgbXV0YWJsZSBSZWZQdHI8RG9jdW1lbnQ+IG1fcmVzcG9uc2VYTUw7CiAK
SW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRMbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0U3RyaW5nJikKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcik7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2Fk
UmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiwgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNl
QnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OlNjcmlwdFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJj
ZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXVEY6OlN0
cmluZyYpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2
ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTG9hZCgpOwpJbmRleDogV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1OSw3ICs3NTksNyBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNw
YXRjaERpZExvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9u
ZywgY29uc3QgU2NyaXB0U3RyaW5nJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3Bh
dGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBjb25zdCBT
dHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJLaXQvZWZsL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oCShyZXZpc2lvbiA2OTM0
NikKKysrIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuaAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBjbGFzcyBGcmFtZUxvYWRlckNsaWVudEVm
bCA6IHB1YmxpYyBGcmFtCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGlu
ZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIpOwogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZyAgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlcios
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVu
Z3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U2NyaXB0U3Ry
aW5nJiBzb3VyY2VTdHJpbmcpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIHNvdXJjZVN0cmluZyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRIYW5kbGVPbmxvYWRFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKTsKSW5kZXg6IFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24g
NjkzNDYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Ny
aXB0U3RyaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaWRnZXQuaD4K
SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw2IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmlu
Zy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIK
ICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDY5MzQ2
KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
blZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclBhcnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRTdHJpbmcuaD4K
ICNwcmFnbWEgd2FybmluZyhwb3ApCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDog
V2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAJKHJl
dmlzaW9uIDY5MzQ2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJSZXNv
dXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70284</attachid>
            <date>2010-10-08 13:52:27 -0700</date>
            <delta_ts>2010-10-13 11:27:44 -0700</delta_ts>
            <desc>Ooops, ignore the WTF changes from the last patch, probably not how we&apos;d do this!</desc>
            <filename>ScriptStringToStringBuffer.2.patch</filename>
            <type>text/plain</type>
            <size>44880</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2OTM0NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC04NzgsNyArODc4LDYgQEAKIAkJNDE2RTc1QkYwRURGOEZENzAwMzYw
RTFEIC8qIFNjcmlwdENhbGxTdGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmNwcCAqLzsgfTsKIAkJNDE2RTc1Q0IwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxG
cmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2
RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oICovOyB9OwogCQk0MTZF
NzVDQzBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUNBMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovOyB9OwotCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1
QjYgLyogU2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE4ODVCOTMx
MUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTg4NUI5MTExQjZGREE2MDAzMzgzQkIgLyogRm9y
bVN1Ym1pc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0MTg4NUI5NDExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4ODVCOTIxMUI2
RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmNwcCAqLzsgfTsKIAkJNDE4Rjg4MDQwRkY5
NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE4Rjg4MDIwRkY5NTdBRTAwODBGMDQ1IC8qIEpT
QWJzdHJhY3RXb3JrZXIuY3BwICovOyB9OwpAQCAtNjkwNiw3ICs2OTA1LDYgQEAKIAkJNDE2RTc1
QkQwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDYWxsU3RhY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTZFNzVDOTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZy
YW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxGcmFtZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcmlwdENhbGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQx
NkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxODg1QjkxMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtU3VibWlzc2lvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTg4NUI5MjExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1p
c3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybVN1Ym1p
c3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MThGODgwMjBGRjk1N0FF
MDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0Fic3RyYWN0V29ya2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2NzYzLDcgKzE2NzYxLDYgQEAKIAkJCQlDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0
QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLywKIAkJCQk0MTI3RDUzNjBGOEFBQjFEMDBF
NDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwICovLAogCQkJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1
RiAvKiBTY3JpcHRTdGF0ZS5oICovLAotCQkJCTQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBT
Y3JpcHRTdHJpbmcuaCAqLywKIAkJCQk5MzRDQzBERjBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0
VmFsdWUuY3BwICovLAogCQkJCTkzNENDMEUwMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1
ZS5oICovLAogCQkJCTIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUu
aCAqLywKQEAgLTIwNTAzLDcgKzIwNTAwLDYgQEAKIAkJCQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4
RjIgLyogU2NyaXB0U291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1NEZEMzgxMDE2
RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzNENDMEUyMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0EzQkY2N0UxMEQ5OUJBRTAwRTZDRTUzIC8qIFNj
cm9sbEFuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTIxMTUwLDcgKzIxMTQ2LDYgQEAKIAkJ
CWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMw
ODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwot
CQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5n
cyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiArNDUyLDEz
IEBAIEpTVmFsdWUganNTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCAKICAgICByZXR1cm4g
anNTdHJpbmcoZXhlYywgcyk7CiB9CiAKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHN0
cmluZ1RvVVN0cmluZyhzKSk7Cit9CisKIEpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNOdWxsKCkpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYg
KzI1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIC8vIFNlZSBKYXZhU2NyaXB0Q29y
ZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgVVN0cmluZyB0aGF0IGlz
IGFscmVhZHkgb3duZWQgYnkgYW5vdGhlcgogICAgIC8vIG9iamVjdCwgdG8gbGV0IHRoZSBlbmdp
bmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5saWtlbHkg
dG8gc2F2ZSBtZW1vcnkuCisgICAgSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgCiAgICAgSlNDOjpKU1ZhbHVlIGpzT3duZWRT
dHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlVTdHJpbmcmKTsgCiAKICAg
ICBTdHJpbmcgaWRlbnRpZmllclRvU3RyaW5nKGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBKU1ZhbHVlIEpTWE1M
SHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJl
c3BvbnNlVGV4dChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgY29uc3QgU2NyaXB0U3RyaW5nJiB0ZXh0ID0gaW1wbCgpLT5yZXNwb25zZVRl
eHQoZWMpOworICAgIFN0cmluZyB0ZXh0ID0gaW1wbCgpLT5yZXNwb25zZVRleHQoZWMpOwogICAg
IGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fs
bEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxG
cmFtZS5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
YWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdENhbGxGcmFtZTo6U2NyaXB0
Q2FsbEZyYW1lKGNvbnN0IFVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0cmluZyYgdXJs
U3RyaW5nLCBpbnQgbGluZU51bWJlciwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBza2lwQXJn
dW1lbnRDb3VudCkKLSAgICA6IG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKKyAgICA6IG1f
ZnVuY3Rpb25OYW1lKHVzdHJpbmdUb1N0cmluZyhmdW5jdGlvbk5hbWUpKQogICAgICwgbV9zb3Vy
Y2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1c3RyaW5nVG9TdHJpbmcodXJsU3RyaW5nKSkKICAgICAs
IG1fbGluZU51bWJlcihsaW5lTnVtYmVyKQogewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhbGxGcmFtZS5oCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KLSNpbmNsdWRlICJTY3Jp
cHRTdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtNTMsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNj
cmlwdENhbGxGcmFtZShjb25zdCBKU0M6OlVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgSlND
OjpVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHNraXBBcmd1bWVudENvdW50KTsKICAgICAgICAgflNjcmlwdENhbGxGcmFtZSgpOwog
Ci0gICAgICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgZnVuY3Rpb25OYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9mdW5jdGlvbk5hbWU7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQogICAgICAgICBjb25zdCBLVVJMJiBz
b3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfQogICAgICAgICB1bnNpZ25l
ZCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CiAKQEAgLTYyLDcg
KzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBTY3JpcHRTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CisgICAgICAgIFN0cmluZyBt
X2Z1bmN0aW9uTmFtZTsKICAgICAgICAgS1VSTCBtX3NvdXJjZVVSTDsKICAgICAgICAgdW5zaWdu
ZWQgbV9saW5lTnVtYmVyOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxT
dGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNr
LmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3Rh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiU2NyaXB0
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKLSNpbmNsdWRlICJTY3JpcHRT
dHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNs
dWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogCiAjaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTUyLDExICs1MSw2IEBAIHZvaWQgU2NyaXB0Q2FsbEFy
Z3VtZW50SGFuZGxlcjo6YXBwZW5kQXIKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnQu
anNPYmplY3QoKSk7CiB9CiAKLXZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudC51c3RyaW5nKCkpKTsKLX0KLQogdm9p
ZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRW
YWx1ZSYgYXJndW1lbnQpCiB7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50LmpzVmFs
dWUoKSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHJl
dmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTQgKzQ0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0VmFsdWU7Ci0gICAgY2xhc3MgU2Ny
aXB0U3RyaW5nOwogCiAgICAgY2xhc3MgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlciB7CiAgICAg
cHVibGljOgogICAgICAgICBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyKFNjcmlwdFN0YXRlKiBz
dGF0ZSkgOiBtX2V4ZWMoc3RhdGUpIHsgfQogCiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQo
Y29uc3QgU2NyaXB0T2JqZWN0Jik7Ci0gICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3Qg
U2NyaXB0U3RyaW5nJik7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0
VmFsdWUmKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmKTsKICAg
ICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKik7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU2NyaXB0U3RyaW5nX2gKLSNkZWZpbmUgU2NyaXB0U3RyaW5nX2gKLQotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9VU3RyaW5nLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3Jp
cHRTdHJpbmcgewotcHVibGljOgotICAgIFNjcmlwdFN0cmluZygpIHt9Ci0gICAgU2NyaXB0U3Ry
aW5nKGNvbnN0IGNoYXIqIHMpIDogbV9zdHIocykge30KLSAgICBTY3JpcHRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBzKSA6IG1fc3RyKHN0cmluZ1RvVVN0cmluZyhzKSkge30KLSAgICBTY3JpcHRTdHJp
bmcoY29uc3QgSlNDOjpVU3RyaW5nJiBzKSA6IG1fc3RyKHMpIHt9Ci0KLSAgICBvcGVyYXRvciBK
U0M6OlVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQotICAgIG9wZXJhdG9yIFN0cmlu
ZygpIGNvbnN0IHsgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhtX3N0cik7IH0KLSAgICBjb25zdCBK
U0M6OlVTdHJpbmcmIHVzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQotCi0gICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0ci5pc051bGwoKTsgfQotICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHIubGVuZ3RoKCk7IH0KLQotICAgIFNjcmlwdFN0cmlu
ZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIqIHMpCi0gICAgewotICAgICAgICBtX3N0ciA9IHM7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9y
Kz0oY29uc3QgU3RyaW5nJiBzKQotICAgIHsKLSAgICAgICAgSlNDOjpTdHJpbmdCdWlsZGVyIGJ1
ZmZlcjsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChtX3N0cik7Ci0gICAgICAgIGJ1ZmZlci5hcHBl
bmQoc3RyaW5nVG9VU3RyaW5nKHMpKTsKLSAgICAgICAgbV9zdHIgPSBidWZmZXIuYnVpbGQoKTsK
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTY3JpcHRTdHJpbmcmIHMpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdHIgPT0g
cy5tX3N0cjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2NyaXB0U3RyaW5n
JiBzKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gQXZvaWQgZXhwb3J0aW5nIGFuIGV4dHJhIHN5
bWJvbCBieSByZS11c2luZyAiPT0iIG9wZXJhdG9yLgotICAgICAgICByZXR1cm4gIShtX3N0ciA9
PSBzLm1fc3RyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpVU3RyaW5nIG1fc3RyOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2NyaXB0U3RyaW5nX2gK
SW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDY5MzQ2KQor
KysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIGNsYXNzIE1l
c3NhZ2VQb3J0OwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwotICAgIGNsYXNzIFNjcmlwdFN0
cmluZzsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xs
ZXI7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHJldmlzaW9uIDY5MzQ2KQor
KysgV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgIlJlc291cmNl
RXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5LmgiCkBAIC01NywxMiArNTgsMTIgQEAgRmlsZVJlYWRlcjo6RmlsZVJlYWRlcihTY3JpcHRF
eGVjdXRpb25DbwogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBt
X3N0YXRlKE5vbmUpCiAgICAgLCBtX3JlYWRUeXBlKFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpCi0g
ICAgLCBtX3Jlc3VsdCgiIikKICAgICAsIG1faXNSYXdEYXRhQ29udmVydGVkKGZhbHNlKQogICAg
ICwgbV9ieXRlc0xvYWRlZCgwKQogICAgICwgbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX2xhc3RQ
cm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUygwKQogeworICAgIG1fYnVpbGRlci5hcHBlbmQoIiIp
OwogfQogCiBGaWxlUmVhZGVyOjp+RmlsZVJlYWRlcigpCkBAIC0xNDQsNyArMTQ1LDggQEAgdm9p
ZCBGaWxlUmVhZGVyOjphYm9ydCgpCiAKICAgICB0ZXJtaW5hdGUoKTsKIAotICAgIG1fcmVzdWx0
ID0gIiI7CisgICAgbV9idWlsZGVyLmNsZWFyKCk7CisgICAgbV9idWlsZGVyLmFwcGVuZCgiIik7
CiAgICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6Y3JlYXRlKEFCT1JUX0VSUik7CiAKICAgICBmaXJl
RXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwpAQCAtMjEyLDcgKzIxNCw3IEBAIHZvaWQg
RmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2gKIAogICAgIHN3aXRjaCAobV9yZWFk
VHlwZSkgewogICAgIGNhc2UgUmVhZEZpbGVBc0JpbmFyeVN0cmluZzoKLSAgICAgICAgbV9yZXN1
bHQgKz0gU3RyaW5nKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkp
OworICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihs
ZW5ndGhSZWNlaXZlZCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJlYWRGaWxlQXNUZXh0
OgogICAgIGNhc2UgUmVhZEZpbGVBc0RhdGFVUkw6CkBAIC0yOTYsMzAgKzI5OCwzMSBAQCBGaWxl
UmVhZGVyOjpSZWFkeVN0YXRlIEZpbGVSZWFkZXI6OnJlYWR5CiAgICAgcmV0dXJuIEVNUFRZOwog
fQogCi1jb25zdCBTY3JpcHRTdHJpbmcmIEZpbGVSZWFkZXI6OnJlc3VsdCgpCitTdHJpbmcgRmls
ZVJlYWRlcjo6cmVzdWx0KCkKIHsKICAgICAvLyBJZiByZWFkaW5nIGFzIGJpbmFyeSBzdHJpbmcs
IHdlIGNhbiByZXR1cm4gdGhlIHJlc3VsdCBpbW1lZGlhdGVseS4KICAgICBpZiAobV9yZWFkVHlw
ZSA9PSBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKQotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7Cisg
ICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIAogICAgIC8vIElmIHdlIGFscmVh
ZHkgY29udmVydCB0aGUgcmF3IGRhdGEgcmVjZWl2ZWQgc28gZmFyLCB3ZSBjYW4gcmV0dXJuIHRo
ZSByZXN1bHQgbm93LgogICAgIGlmIChtX2lzUmF3RGF0YUNvbnZlcnRlZCkKLSAgICAgICAgcmV0
dXJuIG1fcmVzdWx0OworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiAgICAg
bV9pc1Jhd0RhdGFDb252ZXJ0ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcmVhZFR5cGUgPT0gUmVh
ZEZpbGVBc1RleHQpCiAgICAgICAgIGNvbnZlcnRUb1RleHQoKTsKICAgICAvLyBGb3IgZGF0YSBV
UkwsIHdlIG9ubHkgZG8gdGhlIGNvdmVyc2lvbiB1bnRpbCB3ZSByZWNlaXZlIGFsbCB0aGUgcmF3
IGRhdGEuCiAgICAgZWxzZSBpZiAobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzRGF0YVVSTCAmJiBt
X3N0YXRlID09IENvbXBsZXRlZCkKLSAgICAgICAgY29udmVydFRvRGF0YVVSTChtX3Jhd0RhdGEs
IG1fZmlsZVR5cGUsIG1fcmVzdWx0KTsKKyAgICAgICAgY29udmVydFRvRGF0YVVSTChtX3Jhd0Rh
dGEsIG1fZmlsZVR5cGUsIG1fYnVpbGRlcik7CiAKLSAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAg
cmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmNvbnZl
cnRUb1RleHQoKQogewogICAgIGlmICghbV9yYXdEYXRhLnNpemUoKSkgewotICAgICAgICBtX3Jl
c3VsdCA9ICIiOworICAgICAgICBtX2J1aWxkZXIuY2xlYXIoKTsKKyAgICAgICAgbV9idWlsZGVy
LmFwcGVuZCgiIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMzMCwyOCArMzMzLDMy
IEBAIHZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvVGV4dCgpCiAgICAgLy8gRklYTUU6IGNvbnNp
ZGVyIHN1cHBvcnRpbmcgaW5jcmVtZW50YWwgZGVjb2RpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZi4K
ICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9lbmNvZGluZy5pc1ZhbGlkKCkgPyBtX2VuY29k
aW5nIDogVVRGOEVuY29kaW5nKCkpOwotICAgIG1fcmVzdWx0ID0gbV9kZWNvZGVyLT5kZWNvZGUo
Jm1fcmF3RGF0YS5hdCgwKSwgbV9yYXdEYXRhLnNpemUoKSk7CisgICAgbV9idWlsZGVyLmNsZWFy
KCk7CisgICAgbV9idWlsZGVyLmFwcGVuZCgiIik7CisgICAgbV9idWlsZGVyLmFwcGVuZChtX2Rl
Y29kZXItPmRlY29kZSgmbV9yYXdEYXRhLmF0KDApLCBtX3Jhd0RhdGEuc2l6ZSgpKSk7CiAKICAg
ICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1fZXJyb3IpCi0gICAgICAgIG1fcmVzdWx0
ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgbV9idWlsZGVyLmFwcGVuZChtX2RlY29k
ZXItPmZsdXNoKCkpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwoY29u
c3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhLCBjb25zdCBTdHJpbmcmIGZpbGVUeXBlLCBTY3JpcHRT
dHJpbmcmIHJlc3VsdCkKK3ZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChjb25zdCBW
ZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIpCiB7Ci0gICAgcmVzdWx0ID0gImRhdGE6IjsKKyAgICBidWlsZGVyLmNsZWFy
KCk7CisgICAgYnVpbGRlci5hcHBlbmQoImRhdGE6Iik7CiAKICAgICBpZiAoIXJhd0RhdGEuc2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXN1bHQgKz0gZmlsZVR5cGU7Ci0gICAgaWYg
KCFmaWxlVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCArPSAiOyI7Ci0gICAgcmVzdWx0
ICs9ICJiYXNlNjQsIjsKKyAgICBpZiAoIWZpbGVUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICBi
dWlsZGVyLmFwcGVuZChmaWxlVHlwZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI7YmFzZTY0
LCIpOworICAgIH0gZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiYmFzZTY0LCIpOwogCiAg
ICAgVmVjdG9yPGNoYXI+IG91dDsKICAgICBiYXNlNjRFbmNvZGUocmF3RGF0YSwgb3V0KTsKICAg
ICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIHJlc3VsdCArPSBvdXQuZGF0YSgpOworICAgIGJ1aWxk
ZXIuYXBwZW5kKG91dC5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyLmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkZp
bGVFcnJvci5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTc3LDExICs3NywxMSBAQCBw
dWJsaWM6CiAKICAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKICAgICBQYXNzUmVm
UHRyPEZpbGVFcnJvcj4gZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAgY29uc3QgU2Ny
aXB0U3RyaW5nJiByZXN1bHQoKTsKKyAgICBTdHJpbmcgcmVzdWx0KCk7CiAKICAgICAvLyBIZWxw
ZXIgbWV0aG9kcywgYWxzbyB1c2VkIGJ5IEZpbGVSZWFkZXJTeW5jLgogICAgIHN0YXRpYyBFeGNl
cHRpb25Db2RlIGh0dHBTdGF0dXNDb2RlVG9FeGNlcHRpb25Db2RlKGludCBodHRwU3RhdHVzQ29k
ZSk7Ci0gICAgc3RhdGljIHZvaWQgY29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4m
IHJhd0RhdGEsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFNjcmlwdFN0cmluZyYgcmVzdWx0KTsK
KyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3
RGF0YSwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYpOwogCiAgICAgLy8g
QWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKQEAg
LTE0NywxMyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICBSZWFkVHlwZSBtX3JlYWRUeXBlOwogICAg
IFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwogCi0gICAgLy8gTGlrZSBYTUxIdHRwUmVxdWVzdC5t
X3Jlc3BvbnNlVGV4dCwgd2Uga2VlcCB0aGlzIGFzIGEgU2NyaXB0U3RyaW5nLCBub3QgYSBXVEY6
OlN0cmluZy4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGVzZSBzdHJpbmdzIGNhbiBlYXNpbHkg
Z2V0IGh1Z2UgKHRoZXkgYXJlIGZpbGxlZCBmcm9tIHRoZSBmaWxlKSBhbmQKLSAgICAvLyBiZWNh
dXNlIEpTIGNhbiBlYXNpbHkgb2JzZXJ2ZSBtYW55IGludGVybWVkaWF0ZSBzdGF0ZXMsIHNvIGl0
J3MgdmVyeSB1c2VmdWwgdG8gYmUKLSAgICAvLyBhYmxlIHRvIHNoYXJlIHRoZSBidWZmZXIgd2l0
aCBKYXZhU2NyaXB0IHZlcnNpb25zIG9mIHRoZSB3aG9sZSBvciBwYXJ0aWFsIHN0cmluZy4KLSAg
ICAvLyBJbiBjb250cmFzdCwgdGhpcyBzdHJpbmcgZG9lc24ndCBpbnRlcmFjdCBtdWNoIHdpdGgg
dGhlIHJlc3Qgb2YgdGhlIGVuZ2luZSBzbyBpdCdzIG5vdCB0aGF0Ci0gICAgLy8gYmlnIGEgY29z
dCB0aGF0IGl0IGlzbid0IGEgU3RyaW5nLgotICAgIFNjcmlwdFN0cmluZyBtX3Jlc3VsdDsKKyAg
ICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKIAogICAgIC8vIFRoZSByYXcgZGF0YS4gV2UgaGF2
ZSB0byBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgcmF3IGRhdGEgZm9yIGl0IHRvIGJlIGNvbnZlcnRl
ZCB0byB0ZXh0IG9yIGRhdGEgVVJMIGRhdGEuCiAgICAgVmVjdG9yPGNoYXI+IG1fcmF3RGF0YTsK
SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAkocmV2aXNpb24gNjkzNDYpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2
ICszOSw3IEBACiAjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKQEAgLTUwLDcgKzUx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZVJlYWRlclN5bmNMb2FkZXIgOiBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIG91
dHB1dCByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdC4gT3RoZXJ3aXNlLCBzYXZlIGl0IGFzIHRo
ZSByYXcgZGF0YS4KLSAgICBGaWxlUmVhZGVyU3luY0xvYWRlcihTY3JpcHRTdHJpbmcqIHJlc3Vs
dCk7CisgICAgRmlsZVJlYWRlclN5bmNMb2FkZXIoU3RyaW5nQnVpbGRlciopOwogCiAgICAgLy8g
UmV0dXJucyB0aGUgaHR0cCBzdGF0dXMgY29kZS4KICAgICB2b2lkIHN0YXJ0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBFeGNlcHRpb25Db2RlJik7CkBA
IC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgb3V0cHV0IHJl
c3VsdC4gVGhlIGNhbGxlciBwcm92aWRlcyB0aGlzIGluIG9yZGVyIHRvIGxvYWQgdGhlIGJpbmFy
eSBkYXRhIGRpcmVjdGx5LgotICAgIFNjcmlwdFN0cmluZyogbV9yZXN1bHQ7CisgICAgU3RyaW5n
QnVpbGRlciogbV9idWlsZGVyOwogCiAgICAgLy8gVGhlIHJhdyBkYXRhLiBUaGUgY2FsbGVyIGRv
ZXMgbm90IHByb3ZpZGUgdGhlIGFib3ZlIG91dHB1dCByZXN1bHQgYW5kIHdlIG5lZWQgdG8gc2F2
ZSBpdCBoZXJlLgogICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7CkBAIC03Myw4ICs3NCw4IEBA
IHByaXZhdGU6CiAgICAgaW50IG1faHR0cFN0YXR1c0NvZGU7ICAgIAogfTsKIAotRmlsZVJlYWRl
clN5bmNMb2FkZXI6OkZpbGVSZWFkZXJTeW5jTG9hZGVyKFNjcmlwdFN0cmluZyogcmVzdWx0KQot
ICAgIDogbV9yZXN1bHQocmVzdWx0KQorRmlsZVJlYWRlclN5bmNMb2FkZXI6OkZpbGVSZWFkZXJT
eW5jTG9hZGVyKFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpCisgICAgOiBtX2J1aWxkZXIoYnVpbGRl
cikKICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKIHsKIH0KQEAgLTEwMCw4ICsxMDEsOCBAQCB2
b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZlUmVzCiAKIHZvaWQgRmlsZVJlYWRl
clN5bmNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhS
ZWNlaXZlZCkKIHsKLSAgICBpZiAobV9yZXN1bHQpCi0gICAgICAgICptX3Jlc3VsdCArPSBTdHJp
bmcoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CisgICAgaWYg
KG1fYnVpbGRlcikKKyAgICAgICAgbV9idWlsZGVyLT5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CiAgICAgZWxzZQogICAgICAgICBtX3Jhd0RhdGEu
YXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwogfQpA
QCAtMTE3LDM2ICsxMTgsMzYgQEAgdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkRmFpbChj
b25zdAogfQogCiBGaWxlUmVhZGVyU3luYzo6RmlsZVJlYWRlclN5bmMoKQotICAgIDogbV9yZXN1
bHQoIiIpCiB7CisgICAgbV9idWlsZGVyLmFwcGVuZCgiIik7CiB9CiAKLWNvbnN0IFNjcmlwdFN0
cmluZyYgRmlsZVJlYWRlclN5bmM6OnJlYWRBc0JpbmFyeVN0cmluZyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25Db2Rl
JiBlYykKK1N0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVhZEFzQmluYXJ5U3RyaW5nKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGlmICghYmxvYikKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0
OworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICByZWFkKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIGJsb2IsIFJlYWRBc0JpbmFyeVN0cmluZywgZWMpOwotICAgIHJl
dHVybiBtX3Jlc3VsdDsKKyAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLWNv
bnN0IFNjcmlwdFN0cmluZyYgRmlsZVJlYWRlclN5bmM6OnJlYWRBc1RleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgRmlsZVJlYWRlclN5bmM6
OnJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgQmxvYiogYmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgaWYgKCFibG9iKQotICAgICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgICAgIHJl
dHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIAogICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsK
ICAgICByZWFkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2IsIFJlYWRBc1RleHQsIGVjKTsK
LSAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwog
fQogCi1jb25zdCBTY3JpcHRTdHJpbmcmIEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNEYXRhVVJMKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNEYXRhVVJM
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJs
b2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghYmxvYikKLSAgICAgICAgcmV0dXJu
IG1fcmVzdWx0OworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICBy
ZWFkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2IsIFJlYWRBc0RhdGFVUkwsIGVjKTsKLSAg
ICByZXR1cm4gbV9yZXN1bHQ7CisgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogfQog
CiB2b2lkIEZpbGVSZWFkZXJTeW5jOjpyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIFJlYWRUeXBlIHJlYWRUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTE1OCw3ICsxNTksNyBAQCB2b2lkIEZpbGVSZWFkZXJTeW5jOjpyZWFk
KFNjcmlwdEV4ZWN1dGlvCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsRm9yUmVhZGlu
Zyk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKIAotICAgIEZpbGVSZWFkZXJT
eW5jTG9hZGVyIGxvYWRlcigocmVhZFR5cGUgPT0gUmVhZEFzQmluYXJ5U3RyaW5nKSA/ICZtX3Jl
c3VsdCA6IDApOworICAgIEZpbGVSZWFkZXJTeW5jTG9hZGVyIGxvYWRlcigocmVhZFR5cGUgPT0g
UmVhZEFzQmluYXJ5U3RyaW5nKSA/ICZtX2J1aWxkZXIgOiAwKTsKICAgICBsb2FkZXIuc3RhcnQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwgZWMpOwogICAgIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHVybEZvclJlYWRpbmcpOwogICAgIGlmIChlYykK
QEAgLTE2OSwxNyArMTcwLDE3IEBAIHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhl
Y3V0aW8KICAgICAgICAgLy8gTm90aGluZyB0byBkbyBzaW5jZSB3ZSBuZWVkIG5vIGNvbnZlcnNp
b24uCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFJlYWRBc1RleHQ6Ci0gICAgICAgIGNvbnZl
cnRUb1RleHQobG9hZGVyLnJhd0RhdGEoKS5kYXRhKCksIGxvYWRlci5yYXdEYXRhKCkuc2l6ZSgp
LCBtX3Jlc3VsdCk7CisgICAgICAgIGNvbnZlcnRUb1RleHQobG9hZGVyLnJhd0RhdGEoKS5kYXRh
KCksIGxvYWRlci5yYXdEYXRhKCkuc2l6ZSgpLCBtX2J1aWxkZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBSZWFkQXNEYXRhVVJMOgotICAgICAgICBGaWxlUmVhZGVyOjpjb252ZXJ0VG9E
YXRhVVJMKGxvYWRlci5yYXdEYXRhKCksIGJsb2ItPnR5cGUoKSwgbV9yZXN1bHQpOworICAgICAg
ICBGaWxlUmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGxvYWRlci5yYXdEYXRhKCksIGJsb2ItPnR5
cGUoKSwgbV9idWlsZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEZpbGVSZWFkZXJTeW5jOjpjb252ZXJ0VG9UZXh0KGNv
bnN0IGNoYXIqIGRhdGEsIGludCBzaXplLCBTY3JpcHRTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgRmls
ZVJlYWRlclN5bmM6OmNvbnZlcnRUb1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm47
CkBAIC0xOTAsOCArMTkxLDEwIEBAIHZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZlcnRUb1RleHQo
Y29uc3QKICAgICAvLyBwcm92aWRlZCBlbmNvZGluZy4gICAgIAogICAgIC8vIEZJWE1FOiBjb25z
aWRlciBzdXBwb3J0aW5nIGluY3JlbWVudGFsIGRlY29kaW5nIHRvIGltcHJvdmUgdGhlIHBlcmYu
CiAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIgPSBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX2VuY29kaW5nLmlzRW1wdHkoKSA/IFVURjhF
bmNvZGluZygpIDogVGV4dEVuY29kaW5nKG1fZW5jb2RpbmcpKTsKLSAgICByZXN1bHQgPSBkZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgc2l6ZSk7Ci0gICAgcmVzdWx0ICs9IGRlY29kZXItPmZsdXNoKCk7
CisgICAgYnVpbGRlci5jbGVhcigpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIiKTsKKyAgICBidWls
ZGVyLmFwcGVuZChkZWNvZGVyLT5kZWNvZGUoZGF0YSwgc2l6ZSkpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKGRlY29kZXItPmZsdXNoKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlclN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
I2lmIEVOQUJMRShCTE9CKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
IlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTUyLDEz
ICs1MiwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5GaWxlUmVhZGVyU3luYygpIHsgfQog
Ci0gICAgY29uc3QgU2NyaXB0U3RyaW5nJiByZWFkQXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgY29uc3QgU2NyaXB0U3Ry
aW5nJiByZWFkQXNUZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIFN0cmluZyByZWFkQXNC
aW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVhZEFzVGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iLCAi
IiwgZWMpOwogICAgIH0KLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlYWRBc1RleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgY29uc3QgU2NyaXB0U3RyaW5nJiByZWFkQXNEYXRhVVJMKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyByZWFk
QXNUZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgY29uc3QgU3RyaW5nJiBlbmNv
ZGluZywgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyByZWFkQXNEYXRhVVJMKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgogICAg
IGVudW0gUmVhZFR5cGUgewpAQCAtNjgsMTcgKzY4LDExIEBAIHByaXZhdGU6CiAgICAgfTsKIAog
ICAgIEZpbGVSZWFkZXJTeW5jKCk7Ci0gICAgCisKICAgICB2b2lkIHJlYWQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEJsb2IqLCBSZWFkVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
Y29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgU2NyaXB0U3RyaW5nJiBy
ZXN1bHQpOworICAgIHZvaWQgY29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6
ZSwgU3RyaW5nQnVpbGRlciYpOwogCi0gICAgLy8gTGlrZSBYTUxIdHRwUmVxdWVzdC5tX3Jlc3Bv
bnNlVGV4dCwgd2Uga2VlcCB0aGlzIGFzIGEgU2NyaXB0U3RyaW5nLCBub3QgYSBXVEY6OlN0cmlu
Zy4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGVzZSBzdHJpbmdzIGNhbiBlYXNpbHkgZ2V0IGh1
Z2UgKHRoZXkgYXJlIGZpbGxlZCBmcm9tIHRoZSBmaWxlKSBhbmQKLSAgICAvLyBiZWNhdXNlIEpT
IGNhbiBlYXNpbHkgb2JzZXJ2ZSBtYW55IGludGVybWVkaWF0ZSBzdGF0ZXMsIHNvIGl0J3MgdmVy
eSB1c2VmdWwgdG8gYmUKLSAgICAvLyBhYmxlIHRvIHNoYXJlIHRoZSBidWZmZXIgd2l0aCBKYXZh
U2NyaXB0IHZlcnNpb25zIG9mIHRoZSB3aG9sZSBvciBwYXJ0aWFsIHN0cmluZy4KLSAgICAvLyBJ
biBjb250cmFzdCwgdGhpcyBzdHJpbmcgZG9lc24ndCBpbnRlcmFjdCBtdWNoIHdpdGggdGhlIHJl
c3Qgb2YgdGhlIGVuZ2luZSBzbyBpdCdzIG5vdCB0aGF0Ci0gICAgLy8gYmlnIGEgY29zdCB0aGF0
IGl0IGlzbid0IGEgU3RyaW5nLgotICAgIFNjcmlwdFN0cmluZyBtX3Jlc3VsdDsKKyAgICBTdHJp
bmdCdWlsZGVyIG1fYnVpbGRlcjsKIAogICAgIFN0cmluZyBtX2VuY29kaW5nOwogfTsKSW5kZXg6
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2OTM0
NikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw3ICs4Niw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgot
I2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTExMzIs
NyArMTEzMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFpbExvYWRpbmcKICAg
ICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmIHNvdXJj
ZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWdu
ZWQgc2VuZExpbmVOdW1iZXIpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0
cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5k
VVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcikKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTE2Miw3ICsxMTYxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzY3JpcHRJbXBvcnRlZAogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHJlc291cmNlLT5zZXRPdmVycmlkZUNvbnRlbnQoU2NyaXB0U3RyaW5nKHNvdXJjZVN0
cmluZyksIEluc3BlY3RvclJlc291cmNlOjpTY3JpcHQpOworICAgIHJlc291cmNlLT5zZXRPdmVy
cmlkZUNvbnRlbnQoc291cmNlU3RyaW5nLCBJbnNwZWN0b3JSZXNvdXJjZTo6U2NyaXB0KTsKIAog
ICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0
KG1fZnJvbnRlbmQuZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDYgQEAgY2xhc3MgUmVzb3Vy
Y2VSZXNwb25zZTsKIGNsYXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7
CiBjbGFzcyBTY3JpcHRQcm9maWxlOwotY2xhc3MgU2NyaXB0U3RyaW5nOwogY2xhc3MgU2hhcmVk
QnVmZmVyOwogY2xhc3MgU3RvcmFnZTsKIGNsYXNzIFN0b3JhZ2VBcmVhOwpAQCAtMTczLDcgKzE3
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNoVGltZSk7CiAg
ICAgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKLSAgICB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYgc291cmNlU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBz
ZW5kTGluZU51bWJlcik7CisgICAgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZywg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWduZWQgc2VuZExp
bmVOdW1iZXIpOwogICAgIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7CiAKICAgICB2b2lkIHNldFJlc291cmNl
VHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw3IEBA
IEluc3BlY3RvclJlc291cmNlOjpUeXBlIEluc3BlY3RvclJlc291cmMKICAgICByZXR1cm4gY2Fj
aGVkUmVzb3VyY2VUeXBlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnNldE92ZXJy
aWRlQ29udGVudChjb25zdCBTY3JpcHRTdHJpbmcmIGRhdGEsIFR5cGUgdHlwZSkKK3ZvaWQgSW5z
cGVjdG9yUmVzb3VyY2U6OnNldE92ZXJyaWRlQ29udGVudChjb25zdCBTdHJpbmcmIGRhdGEsIFR5
cGUgdHlwZSkKIHsKICAgICBtX292ZXJyaWRlQ29udGVudCA9IGRhdGE7CiAgICAgbV9vdmVycmlk
ZUNvbnRlbnRUeXBlID0gdHlwZTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2UuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlICJIVFRQ
SGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5o
IgogI2luY2x1ZGUgIldlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZS5oIgogCkBAIC05OCw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCB1cGRhdGVXZWJTb2NrZXRSZXNwb25zZShjb25zdCBXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBzZXRPdmVy
cmlkZUNvbnRlbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBkYXRhLCBUeXBlKTsKKyAgICAgICAgdm9p
ZCBzZXRPdmVycmlkZUNvbnRlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBUeXBlKTsKIAogICAgICAg
ICBTdHJpbmcgc291cmNlU3RyaW5nKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBzb3VyY2VCeXRl
cygpIGNvbnN0OwpAQCAtMTk0LDcgKzE5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdW5zaWduZWQgbV9jb25uZWN0aW9uSUQ7CiAgICAgICAgIGJvb2wgbV9jb25uZWN0aW9uUmV1
c2VkOwogICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkVGltaW5nPiBtX2xvYWRUaW1pbmc7Ci0g
ICAgICAgIFNjcmlwdFN0cmluZyBtX292ZXJyaWRlQ29udGVudDsKKyAgICAgICAgU3RyaW5nIG1f
b3ZlcnJpZGVDb250ZW50OwogICAgICAgICBUeXBlIG1fb3ZlcnJpZGVDb250ZW50VHlwZTsKICAg
ICAgICAgQ2hhbmdlcyBtX2NoYW5nZXM7CiAgICAgICAgIGJvb2wgbV9pc01haW5SZXNvdXJjZTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw2IEBACiAj
aW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5o
IgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNiBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xh
c3MgUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgU2NyaXB0
U291cmNlQ29kZTsKLWNsYXNzIFNjcmlwdFN0cmluZzsKIGNsYXNzIFNjcmlwdFZhbHVlOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7CiAgICAgY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0gICAgY2xh
c3MgU2NyaXB0U3RyaW5nOwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAgIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKICAgICBjbGFzcyBTdWJzdGl0dXRlRGF0YTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkTm90aWZpZXIuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWROb3RpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBA
IGNsYXNzIEZyYW1lOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9hZGVy
OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLWNsYXNzIFNjcmlwdFN0cmluZzsKIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKIAogY2xhc3MgUmVzb3VyY2VMb2FkTm90aWZpZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAko
cmV2aXNpb24gNjkzNDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE2IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6
YXBwZW5kKGNvbnN0IFN0cmluZyYKICAgICAgICAgbV9zdHJpbmdzLmFwcGVuZChzdHJpbmcpOwog
fQogCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGFwcGVuZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3Ro
KSk7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBhcHBlbmQoU3RyaW5nKGNoYXJhY3RlcnMsIGxl
bmd0aCkpOworfQorCiB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChVQ2hhciBjKQogewogICAg
IHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gbGVuZ3RoKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TdHJpbmdCdWlsZGVyLmgJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ0J1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBh
cHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgY2hh
ciosIHVuc2lnbmVkKTsKICAgICB2b2lkIGFwcGVuZChVQ2hhcik7CiAgICAgdm9pZCBhcHBlbmQo
Y2hhcik7CiAgICAgCkBAIC01OSw2ICs2MSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0b1N0
cmluZyhDb25jYXRNb2RlIG1vZGUgPSBDb25jYXRVbmFsdGVyZWQpIGNvbnN0OwogCisgICAgU3Ry
aW5nIGludGVyaW1TdHJpbmcoKSBjb25zdCB7IHJldHVybiB0b1N0cmluZygpOyB9CisgICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpIHsgfQorCiBwcml2YXRlOgogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gbV90b3RhbExlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCk7IH0KIApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaAkocmV2aXNp
b24gNjkzNDYpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1
ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNs
aWVudC5oIgpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNjkzNDYpCisrKyBX
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsx
NzMsNiBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlCiAgICAgLCBt
X2FzQmxvYihmYWxzZSkKICNlbmRpZgogICAgICwgbV9zdGF0ZShVTlNFTlQpCi0gICAgLCBtX3Jl
c3BvbnNlVGV4dCgiIikKICAgICAsIG1fY3JlYXRlZERvY3VtZW50KGZhbHNlKQogICAgICwgbV9l
cnJvcihmYWxzZSkKICAgICAsIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCh0cnVlKQpAQCAtMTg1LDYg
KzE4NCw3IEBAIFhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGUKICAgICAs
IG1fZXhjZXB0aW9uQ29kZSgwKQogICAgICwgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUodGhpcykK
IHsKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5hcHBlbmQoIiIpOwogICAgIGluaXRpYWxpemVYTUxI
dHRwUmVxdWVzdFN0YXRpY0RhdGEoKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgeG1sSHR0cFJlcXVl
c3RDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIFhNTEh0dHBSZXF1ZXN0
OjpTdGF0ZSBYTUxIdHRwUmVxdWVzdDo6cmUKICAgICByZXR1cm4gbV9zdGF0ZTsKIH0KIAotY29u
c3QgU2NyaXB0U3RyaW5nJiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUZXh0KEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQogICAg
IGlmIChtX2FzQmxvYikKQEAgLTIzNCw3ICsyMzQsNyBAQCBjb25zdCBTY3JpcHRTdHJpbmcmIFhN
TEh0dHBSZXF1ZXN0OjpyZXNwCiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAjZW5kaWYK
LSAgICByZXR1cm4gbV9yZXNwb25zZVRleHQ7CisgICAgcmV0dXJuIG1fcmVzcG9uc2VCdWlsZGVy
LmludGVyaW1TdHJpbmcoKTsKIH0KIAogRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25z
ZVhNTChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKQEAgLTI1OSw3ICsyNTksNyBAQCBEb2N1bWVu
dCogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKEV4CiAgICAgICAgICAgICBtX3Jlc3BvbnNl
WE1MID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBtX3VybCk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNl
WE1MLT5vcGVuKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQuCi0g
ICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT53cml0ZShTdHJpbmcobV9yZXNwb25zZVRleHQpKTsK
KyAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPndyaXRlKG1fcmVzcG9uc2VCdWlsZGVyLmludGVy
aW1TdHJpbmcoKSk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5maW5pc2hQYXJzaW5nKCk7
CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5jbG9zZSgpOwogCkBAIC02MjcsNyArNjI3LDgg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogCiAgICAgaW50ZXJuYWxBYm9ydCgpOwog
Ci0gICAgbV9yZXNwb25zZVRleHQgPSAiIjsKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5jbGVhcigp
OworICAgIG1fcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiIik7CiAgICAgbV9jcmVhdGVkRG9jdW1l
bnQgPSBmYWxzZTsKICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICNpZiBFTkFCTEUoWEhSX1JFU1BP
TlNFX0JMT0IpCkBAIC02NzYsNyArNjc3LDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6aW50ZXJu
YWxBYm9ydCgpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjbGVhclJlc3BvbnNlKCkKIHsKICAgICBt
X3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwotICAgIG1fcmVzcG9uc2VUZXh0ID0gIiI7
CisgICAgbV9yZXNwb25zZUJ1aWxkZXIuY2xlYXIoKTsKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5h
cHBlbmQoIiIpOwogICAgIG1fY3JlYXRlZERvY3VtZW50ID0gZmFsc2U7CiAgICAgbV9yZXNwb25z
ZVhNTCA9IDA7CiAjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQpAQCAtNzMzLDcgKzczNSw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkKICAgICAvLyByZXBvcnQg
dGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpOwogICAgIGlm
IChoYXNDYWNoZWRET01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIHRoaXMpKQotICAgICAgICBn
bG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlVGV4dC5zaXpl
KCkgKiAyKTsKKyAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
bV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKICNlbmRpZgogCiAgICAgdW5zZXRQZW5k
aW5nQWN0aXZpdHkodGhpcyk7CkBAIC05NDIsNyArOTQ0LDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6ZGlkRmluaXNoTG9hZGluZyh1bgogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJ
VkVEKTsKIAogICAgIGlmIChtX2RlY29kZXIpCi0gICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1f
ZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgbV9yZXNwb25zZUJ1aWxkZXIuYXBwZW5kKG1fZGVj
b2Rlci0+Zmx1c2goKSk7CisKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5zaHJpbmtUb0ZpdCgpOwog
CiAjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQogICAgIC8vIEZJWE1FOiBTZXQgbV9yZXNw
b25zZUJsb2IgdG8gc29tZXRoaW5nIGhlcmUgaW4gdGhlIG1fYXNCbG9iIGNhc2UuCkBAIC05NTAs
NyArOTU0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bgogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0g
ICAgICAgIGluc3BlY3Rvci0+cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGlkZW50
aWZpZXIsIG1fcmVzcG9uc2VUZXh0LCBtX3VybCwgbV9sYXN0U2VuZFVSTCwgbV9sYXN0U2VuZExp
bmVOdW1iZXIpOworICAgICAgICBpbnNwZWN0b3ItPnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRw
UmVxdWVzdChpZGVudGlmaWVyLCBtX3Jlc3BvbnNlQnVpbGRlci5pbnRlcmltU3RyaW5nKCksIG1f
dXJsLCBtX2xhc3RTZW5kVVJMLCBtX2xhc3RTZW5kTGluZU51bWJlcik7CiAjZW5kaWYKIAogICAg
IGJvb2wgaGFkTG9hZGVyID0gbV9sb2FkZXI7CkBAIC0xMDE5LDcgKzEwMjMsNyBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zCiAgICAgaWYgKGxlbiA9PSAtMSkKICAg
ICAgICAgbGVuID0gc3RybGVuKGRhdGEpOwogCi0gICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5hcHBlbmQobV9k
ZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKSk7CiAKICAgICBpZiAoIW1fZXJyb3IpIHsKICAgICAg
ICAgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNwb25zZS5leHBlY3RlZENvbnRlbnRM
ZW5ndGgoKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKKyNpbmNs
dWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgiCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBv
dmVycmlkZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGUpOwogICAgIFN0cmluZyBnZXRB
bGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIFN0cmluZyBnZXRS
ZXNwb25zZUhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlc3BvbnNlVGV4dChFeGNlcHRpb25Db2Rl
JikgY29uc3Q7CisgICAgU3RyaW5nIHJlc3BvbnNlVGV4dChFeGNlcHRpb25Db2RlJikgY29uc3Q7
CiAgICAgRG9jdW1lbnQqIHJlc3BvbnNlWE1MKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICNpZiBF
TkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCiAgICAgQmxvYiogcmVzcG9uc2VCbG9iKEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKQEAgLTE3NiwxMyArMTc2LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0
cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAKLSAgICAvLyBVbmxpa2UgbW9zdCBz
dHJpbmdzIGluIHRoZSBET00sIHdlIGtlZXAgdGhpcyBhcyBhIFNjcmlwdFN0cmluZywgbm90IGEg
V1RGOjpTdHJpbmcuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlc2Ugc3RyaW5ncyBjYW4gZWFz
aWx5IGdldCBodWdlICh0aGV5IGFyZSBmaWxsZWQgZnJvbSB0aGUgbmV0d29yayB3aXRoCi0gICAg
Ly8gbm8gcGFyc2luZykgYW5kIGJlY2F1c2UgSlMgY2FuIGVhc2lseSBvYnNlcnZlIG1hbnkgaW50
ZXJtZWRpYXRlIHN0YXRlcywgc28gaXQncyB2ZXJ5IHVzZWZ1bAotICAgIC8vIHRvIGJlIGFibGUg
dG8gc2hhcmUgdGhlIGJ1ZmZlciB3aXRoIEphdmFTY3JpcHQgdmVyc2lvbnMgb2YgdGhlIHdob2xl
IG9yIHBhcnRpYWwgc3RyaW5nLgotICAgIC8vIEluIGNvbnRyYXN0LCB0aGlzIHN0cmluZyBkb2Vz
bid0IGludGVyYWN0IG11Y2ggd2l0aCB0aGUgcmVzdCBvZiB0aGUgZW5naW5lIHNvIGl0J3Mgbm90
IHRoYXQKLSAgICAvLyBiaWcgYSBjb3N0IHRoYXQgaXQgaXNuJ3QgYSBTdHJpbmcuCi0gICAgU2Ny
aXB0U3RyaW5nIG1fcmVzcG9uc2VUZXh0OworICAgIFN0cmluZ0J1aWxkZXIgbV9yZXNwb25zZUJ1
aWxkZXI7CiAgICAgbXV0YWJsZSBib29sIG1fY3JlYXRlZERvY3VtZW50OwogICAgIG11dGFibGUg
UmVmUHRyPERvY3VtZW50PiBtX3Jlc3BvbnNlWE1MOwogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3
IEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG8KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9hZFJl
c291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNj
cmlwdFN0cmluZyYpCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRS
ZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
aAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgpOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTY3JpcHRTdHJpbmcmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICAKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKTsK
SW5kZXg6IFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRFZmwuY3BwCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDcg
QEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMbwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMb2FkUmVz
b3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYp
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1M
SHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQpJbmRleDogV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRFZmwuaAkocmV2aXNpb24gNjkzNDYpCisrKyBXZWJLaXQvZWZsL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRFZmwgOiBwdWJsaWMgRnJhbQogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNp
Z25lZCBsb25nICBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWls
TG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNjcmlwdFN0cmluZyYgc291cmNlU3RyaW5nKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzb3VyY2VTdHJp
bmcpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxMb2FkKCk7CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDY5MzQ2KQorKysgV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTExLDcgKzExMSw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRD
b250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NjcmlwdFN0cmluZy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRy
YXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2lkZ2V0Lmg+CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2OTM0NikK
KysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNiBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50
ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVmlld3BvcnRBcmd1
bWVudHMuaCIKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJQYXJ0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0U3RyaW5nLmg+CiAjcHJhZ21hIHdhcm5pbmcocG9wKQog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCShyZXZpc2lvbiA2OTM0NikKKysrIFdlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70632</attachid>
            <date>2010-10-13 11:10:12 -0700</date>
            <delta_ts>2010-10-13 11:37:01 -0700</delta_ts>
            <desc>[PART I] Allow fast inspection of intermediate states of a StringBuilder.</desc>
            <filename>StringBuilderImpl.patch</filename>
            <type>text/plain</type>
            <size>33637</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NjcxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMTAtMTMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0Mzk4NyAtIERvd25sb2FkaW5nIHVzaW5n
IFhIUiBpcyBtdWNoIHNsb3dlciB0aGFuIGJlZm9yZQorICAgICAgICBDaGFuZ2UgU3RyaW5nQnVp
bGRlciB0byB1c2Ugb3ZlcmNhcGFjaXR5IGluIGEgU3RyaW5nSW1wbCwgcmF0aGVyIHRoYW4gYSBW
ZWN0b3IuCisgICAgICAgIEZ1bmRhbWVudGFsbHkgdGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgKGNv
cGllcyBjdXJyZW50IGNvbnRlbnRzIHRvIGV4cGFuZCBjYXBhY2l0eSwKKyAgICAgICAgcmF0aGVy
IHRoYW4gdXNpbmcgYSByb3BlKSwgYnV0IHRoaXMgYXBwcm9hY2ggYWxsb3dzIHRoZSBpbnRlcm1h
ZGlhdGUgc3RhdGUgb2YgdGhlCisgICAgICAgIFN0cmluZyB0byBiZSBpbnNwZWN0ZWQgaW4gdGhl
IGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgdG8gcmVzb2x2ZS4KKworICAgICAgICAqIHJ1bnRpbWUv
SlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRT
dHJpbmcpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJv
cGVydHkpOgorICAgICAgICAgICAgUmVuYW1lZCBTdHJpbmdCdWlsZGVyOjpzaXplKCkgLT4gbGVu
Z3RoKCkgKHRvIG1hdGNoIG90aGVyIFN0cmluZyB0eXBlcykuCisKKyAgICAgICAgKiBydW50aW1l
L1VTdHJpbmdCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmdCdWlsZGVyOjphcHBlbmQp
OgorICAgICAgICAoSlNDOjpVU3RyaW5nQnVpbGRlcjo6dG9VU3RyaW5nKToKKyAgICAgICAgICAg
IFVwZGF0ZSBmb3IgY2hhbmdlcyBpbiBwYXJlbnQgY2xhc3MsIGNhbiBqdXN0ICd1c2luZycgdGhl
IGFwcGVuZCBtZXRob2RzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZyk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1
aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFs
bG9jYXRlQnVmZmVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0
aWFsaXplZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVuZCk6CisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KToKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxk
ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphcHBlbmQpOgorICAgICAgICAoV1RG
OjpTdHJpbmdCdWlsZGVyOjp0b1N0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6
OnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6
Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmlzRW1wdHkpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6Y2xlYXIpOgorICAgICAgICAgICAgQ2xhc3MgdXBkYXRlZCB0byB1c2Ugb3ZlcmNh
cGFjaXR5IGluIGEgU3RyaW5nSW1wbCwgcmF0aGVyIHRoYW4gYSBWZWN0b3IuCisKKyAgICAgICAg
KiBBbmRyb2lkLm1rOgorICAgICAgICAqIEFuZHJvaWQudjgud3RmLm1rOgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZUNvbW1vbi52c3Byb3BzOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovanNjL2pzYy52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTAtMTAtMTMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
QW5kcm9pZC5tawkocmV2aXNpb24gNjk2MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1r
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9IFwK
IAlcCiAJd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCBcCiAJd3RmL3RleHQvQ1N0cmluZy5jcHAg
XAorCXd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIFwKIAl3dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cCBcCiAJd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBcCiAJXApJbmRleDogSmF2YVNjcmlwdENvcmUv
QW5kcm9pZC52OC53dGYubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQW5kcm9pZC52
OC53dGYubWsJKHJldmlzaW9uIDY5NjE1KQorKysgSmF2YVNjcmlwdENvcmUvQW5kcm9pZC52OC53
dGYubWsJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
IFwKIAlcCiAJd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCBcCiAJd3RmL3RleHQvQ1N0cmluZy5j
cHAgXAorCXd0Zi90ZXh0L1N0cmluZ0J1aWRsZXIuY3BwIFwKIAl3dGYvdGV4dC9TdHJpbmdJbXBs
LmNwcCBcCiAJd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBcCiAJXApJbmRleDogSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUuYW0JKHJldmlzaW9uIDY5NjE1KQorKysgSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTUwOSw2ICs1MDksNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9DU3RyaW5nLmNwcCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvQ1N0cmluZy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdCdWZmZXIuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAg
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nSGFzaC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdJbXBsQmFzZS5oIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlz
aW9uIDY5NjE1KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNiArMTMyLDggQEAgX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hhcmVk
SW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRyYWNlRXYKIF9f
Wk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzE1VGhyZWFkU3RhY2tUeXBlRQogX19aTjNK
U0MxMkpTR2xvYmFsRGF0YUQxRXYKK19fWk4zSlNDMTJSZWdFeHBPYmplY3Q0aW5mb0UKK19fWk4z
SlNDMTJSZWdFeHBPYmplY3RDMUVQTlNfMTRKU0dsb2JhbE9iamVjdEVOM1dURjE3Tm9uTnVsbFBh
c3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRU5TNF9JTlNfNlJlZ0V4cEVFRQogX19aTjNKU0MxMlNh
bXBsaW5nVG9vbDVzZXR1cEV2CiBfX1pOM0pTQzEyU21hbGxTdHJpbmdzMTdjcmVhdGVFbXB0eVN0
cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pTQzEyU21hbGxTdHJpbmdzMjdjcmVhdGVT
aW5nbGVDaGFyYWN0ZXJTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRWgKQEAgLTE1MCw3ICsxNTIs
NiBAQCBfX1pOM0pTQzEzU2FtcGxpbmdGbGFnczRzdG9wRXYKIF9fWk4zSlNDMTNTYW1wbGluZ0Zs
YWdzNXN0YXJ0RXYKIF9fWk4zSlNDMTNTYW1wbGluZ0ZsYWdzN3NfZmxhZ3NFCiBfX1pOM0pTQzEz
U3RhdGVtZW50Tm9kZTZzZXRMb2NFaWkKLV9fWk4zSlNDMTRoZWFwU3RhdGlzdGljc0VQTlNfMTJK
U0dsb2JhbERhdGFFCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMGdsb2JhbEV4ZWNFdgogX19a
TjNKU0MxNEpTR2xvYmFsT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUktOU18x
MElkZW50aWZpZXJFUE5TXzhKU09iamVjdEVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxMmRl
ZmluZVNldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0
RWoKQEAgLTE2NSw2ICsxNjYsNyBAQCBfX1pOM0pTQzE0U2FtcGxpbmdUaHJlYWQ0c3RvcEV2CiBf
X1pOM0pTQzE0U2FtcGxpbmdUaHJlYWQ1c3RhcnRFagogX19aTjNKU0MxNFRpbWVvdXRDaGVja2Vy
MTBkaWRUaW1lT3V0RVBOU185RXhlY1N0YXRlRQogX19aTjNKU0MxNFRpbWVvdXRDaGVja2VyNXJl
c2V0RXYKK19fWk4zSlNDMTRoZWFwU3RhdGlzdGljc0VQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pO
M0pTQzE0dGhyb3dUeXBlRXJyb3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzE1SlNXcmFwcGVy
T2JqZWN0MTJtYXJrQ2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pOM0pTQzE1Y3JlYXRlVHlw
ZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCkBAIC0yMzksNiArMjQxLDggQEAg
X19aTjNKU0M2SlNMb2NrNGxvY2tFTlNfMTRKU0xvY2tCZWhhdmlvcgogX19aTjNKU0M2SlNMb2Nr
NnVubG9ja0VOU18xNEpTTG9ja0JlaGF2aW9yRQogX19aTjNKU0M2SlNMb2NrOWxvY2tDb3VudEV2
CiBfX1pOM0pTQzZKU0xvY2tDMUVQTlNfOUV4ZWNTdGF0ZUUKK19fWk4zSlNDNlJlZ0V4cDZjcmVh
dGVFUE5TXzEySlNHbG9iYWxEYXRhRVJLTlNfN1VTdHJpbmdFUzVfCitfX1pOM0pTQzZSZWdFeHBE
MUV2CiBfX1pOM0pTQzdKU0FycmF5MTJtYXJrQ2hpbGRyZW5FUk5TXzlNYXJrU3RhY2tFCiBfX1pO
M0pTQzdKU0FycmF5MTVzZXRTdWJjbGFzc0RhdGFFUHYKIF9fWk4zSlNDN0pTQXJyYXkxOGdldE93
blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQpAQCAtMzcy
LDYgKzM3NiwxMSBAQCBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCiBfX1pO
M1dURjEyZGV0YWNoVGhyZWFkRWoKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYx
MnJhbmRvbU51bWJlckV2CitfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExcmVpZnlTdHJpbmdFdgor
X19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxMXNocmlua1RvRml0RXYKK19fWk4zV1RGMTNTdHJpbmdC
dWlsZGVyNmFwcGVuZEVQS2NqCitfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjZhcHBlbmRFUEt0agor
X19aTjNXVEYxM1N0cmluZ0J1aWxkZXI2cmVzaXplRWoKIF9fWk4zV1RGMTNXVEZUaHJlYWREYXRh
MTBzdGF0aWNEYXRhRQogX19aTjNXVEYxM1dURlRocmVhZERhdGFDMUV2CiBfX1pOM1dURjEzV1RG
VGhyZWFkRGF0YUQxRXYKQEAgLTQ4NCw4ICs0OTMsNiBAQCBfX1pOSzNKU0MxMEpTRnVuY3Rpb24y
M2lzSG9zdEZ1bmN0aW9uTm9uCiBfX1pOSzNKU0MxMUludGVycHJldGVyMTRyZXRyaWV2ZUNhbGxl
ckVQTlNfOUV4ZWNTdGF0ZUVQTlNfMTBKU0Z1bmN0aW9uRQogX19aTkszSlNDMTFJbnRlcnByZXRl
cjE4cmV0cmlldmVMYXN0Q2FsbGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5T
XzdKU1ZhbHVlRQogX19aTkszSlNDMTJQcm9wZXJ0eVNsb3QxNGZ1bmN0aW9uR2V0dGVyRVBOU185
RXhlY1N0YXRlRQotX19aTjNKU0MxMlJlZ0V4cE9iamVjdDRpbmZvRQotX19aTjNKU0MxMlJlZ0V4
cE9iamVjdEMxRVBOU18xNEpTR2xvYmFsT2JqZWN0RU4zV1RGMTdOb25OdWxsUGFzc1JlZlB0cklO
U185U3RydWN0dXJlRUVFTlM0X0lOU182UmVnRXhwRUVFCiBfX1pOSzNKU0MxNEpTR2xvYmFsT2Jq
ZWN0MTRpc0R5bmFtaWNTY29wZUVSYgogX19aTkszSlNDMTZJbnRlcm5hbEZ1bmN0aW9uOWNsYXNz
SW5mb0V2CiBfX1pOSzNKU0MxNkpTVmFyaWFibGVPYmplY3QxNmlzVmFyaWFibGVPYmplY3RFdgpA
QCAtNTE2LDggKzUyMyw2IEBAIF9fWk5LM0pTQzZKU0NlbGw5Z2V0U3RyaW5nRVBOU185RXhlY1N0
YXQKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0U3RyaW5nRVBOU185RXhlY1N0YXRlRVJOU183VVN0cmlu
Z0UKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0VUludDMyRVJqCiBfX1pOSzNKU0M2SlNDZWxsOXRvQm9v
bGVhbkVQTlNfOUV4ZWNTdGF0ZUUKLV9fWk4zSlNDNlJlZ0V4cDZjcmVhdGVFUE5TXzEySlNHbG9i
YWxEYXRhRVJLTlNfN1VTdHJpbmdFUzVfCi1fX1pOM0pTQzZSZWdFeHBEMUV2CiBfX1pOSzNKU0M3
QXJnTGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszSlNDN0pTQXJyYXkxMnN1YmNsYXNzRGF0YUV2
CiBfX1pOSzNKU0M3SlNWYWx1ZTE2dG9PYmplY3RTbG93Q2FzZUVQTlNfOUV4ZWNTdGF0ZUUKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkocmV2aXNpb24gNjk2MTUpCisrKyBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNiAr
NDUyLDcgQEAKICAgICAgICAgICAgICd3dGYvdGV4dC9DU3RyaW5nLmNwcCcsCiAgICAgICAgICAg
ICAnd3RmL3RleHQvQ1N0cmluZy5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdCdWZm
ZXIuaCcsCisgICAgICAgICAgICAnd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAnLAogICAgICAg
ICAgICAgJ3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaCcsCiAgICAgICAgICAgICAnd3RmL3RleHQv
U3RyaW5nSGFzaC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCcsCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21t
b24udnNwcm9wcwkocmV2aXNpb24gNjk2MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVDb21tb24udnNwcm9wcwko
d29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQAogCS8+DQogCTxUb29sDQogCQlOYW1lPSJW
Q1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSJta2RpciAyJmd0O05VTCAmcXVv
dDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7
JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwu
LlwuLlx3dGZcKi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZh
dGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFBy
b2plY3REaXIpXC4uXC4uXHd0Zlx0ZXh0XCouaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkg
L3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwuLlx3dGZcdW5pY29kZVwqLmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90
OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cLi5cd3RmXHVu
aWNvZGVcaWN1XCouaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2
YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlwuLlxwYXJzZXJcKi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXHJ1bnRpbWVcKi5oJnF1b3Q7ICZxdW90OyQo
V2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gw
RDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXFZNXCouaCZxdW90
OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3Jl
JnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwuLlxi
eXRlY29kZVwqLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0
ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJv
amVjdERpcilcLi5cLi5caW50ZXJwcmV0ZXJcKi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0
RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29w
eSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXGFzc2VtYmxlclwqLmgmcXVvdDsgJnF1
b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90
OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cLi5caml0XCou
aCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3Jp
cHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwu
LlwuLlxkZWJ1Z2dlclwqLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVc
cHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90
OyQoUHJvamVjdERpcilcLi5cLi5ccHJvZmlsZXJcKi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXGNyZWF0ZV9oYXNoX3RhYmxlJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENv
cmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4u
XHBjcmVccGNyZS5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZh
dGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFBy
b2plY3REaXIpXC4uXC4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZy5jcHAmcXVvdDsgJnF1b3Q7JChX
ZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBE
OyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cLi5cd3RmXHRleHRcU3Ry
aW5nSW1wbC5jcHAmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0
ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJv
amVjdERpcilcLi5cLi5cd3RmXHRleHRcV1RGU3RyaW5nLmNwcCZxdW90OyAmcXVvdDskKFdlYktp
dE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4
MEE7JiN4MEQ7JiN4MEE7JiN4MEQ7JiN4MEE7bWtkaXIgMiZndDtOVUwgJnF1b3Q7JChPdXREaXIp
XEphdmFTY3JpcHRDb3JlLnJlc291cmNlcyZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZx
dW90OyQoUHJvamVjdERpcikuLlwkKFByb2plY3ROYW1lKS5yZXNvdXJjZXNcKiZxdW90OyAmcXVv
dDskKE91dERpcilcJChQcm9qZWN0TmFtZSkucmVzb3VyY2VzJnF1b3Q7JiN4MEQ7JiN4MEE7JiN4
MEQ7JiN4MEE7aWYgZXhpc3QgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFpbGVkJnF1
b3Q7IGRlbCAmcXVvdDskKFdlYktpdE91dHB1dERpcilcYnVpbGRmYWlsZWQmcXVvdDsmI3gwRDsm
I3gwQTsiDQorCQlDb21tYW5kTGluZT0ibWtkaXIgMiZndDtOVUwgJnF1b3Q7JChXZWJLaXRPdXRw
dXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBEOyYjeDBBOyYj
eDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cLi5cd3RmXCouaCZx
dW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRD
b3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwu
Llx3dGZcdGV4dFwqLmgmcXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJp
dmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQo
UHJvamVjdERpcilcLi5cLi5cd3RmXHVuaWNvZGVcKi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXHd0Zlx1bmljb2RlXGljdVwqLmgm
cXVvdDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0
Q29yZSZxdW90OyYjeDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5c
Li5ccGFyc2VyXCouaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2
YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlwuLlxydW50aW1lXCouaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERp
cilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkg
L3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwuLlxWTVwqLmgmcXVvdDsgJnF1b3Q7JChXZWJL
aXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYjeDBEOyYj
eDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cLi5cYnl0ZWNvZGVcKi5oJnF1
b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENv
cmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4u
XGludGVycHJldGVyXCouaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxw
cml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7
JChQcm9qZWN0RGlyKVwuLlwuLlxhc3NlbWJsZXJcKi5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0
cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4
Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXGppdFwqLmgmcXVvdDsgJnF1b3Q7
JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29yZSZxdW90OyYj
eDBEOyYjeDBBO3hjb3B5IC95IC9kICZxdW90OyQoUHJvamVjdERpcilcLi5cLi5cZGVidWdnZXJc
Ki5oJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNj
cmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIp
XC4uXC4uXHByb2ZpbGVyXCouaCZxdW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVk
ZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1
b3Q7JChQcm9qZWN0RGlyKVwuLlwuLlxjcmVhdGVfaGFzaF90YWJsZSZxdW90OyAmcXVvdDskKFdl
YktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7JiN4MEQ7
JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwuLlxwY3JlXHBjcmUuaCZx
dW90OyAmcXVvdDskKFdlYktpdE91dHB1dERpcilcaW5jbHVkZVxwcml2YXRlXEphdmFTY3JpcHRD
b3JlJnF1b3Q7JiN4MEQ7JiN4MEE7eGNvcHkgL3kgL2QgJnF1b3Q7JChQcm9qZWN0RGlyKVwuLlwu
Llx3dGZcdGV4dFxBdG9taWNTdHJpbmcuY3BwJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXHd0Zlx0ZXh0XFN0cmluZ0J1aWxkZXIuY3Bw
JnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGlyKVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlw
dENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4u
XC4uXHd0Zlx0ZXh0XFN0cmluZ0ltcGwuY3BwJnF1b3Q7ICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUmcXVvdDsmI3gwRDsmI3gwQTt4Y29weSAv
eSAvZCAmcXVvdDskKFByb2plY3REaXIpXC4uXC4uXHd0Zlx0ZXh0XFdURlN0cmluZy5jcHAmcXVv
dDsgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29y
ZSZxdW90OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO21rZGlyIDImZ3Q7TlVM
ICZxdW90OyQoT3V0RGlyKVxKYXZhU2NyaXB0Q29yZS5yZXNvdXJjZXMmcXVvdDsmI3gwRDsmI3gw
QTt4Y29weSAveSAvZCAmcXVvdDskKFByb2plY3REaXIpLi5cJChQcm9qZWN0TmFtZSkucmVzb3Vy
Y2VzXComcXVvdDsgJnF1b3Q7JChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnJlc291cmNlcyZxdW90
OyYjeDBEOyYjeDBBOyYjeDBEOyYjeDBBO2lmIGV4aXN0ICZxdW90OyQoV2ViS2l0T3V0cHV0RGly
KVxidWlsZGZhaWxlZCZxdW90OyBkZWwgJnF1b3Q7JChXZWJLaXRPdXRwdXREaXIpXGJ1aWxkZmFp
bGVkJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KIAkvPg0KIAk8VG9vbA0KIAkJTmFtZT0iVkNQcmVCdWls
ZEV2ZW50VG9vbCINCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
V1RGL1dURi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA2OTYxNSkKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNjEzLDYgKzYxMywxMCBAQAogIAkJCT4NCiAgCQk8L0ZpbGU+DQogIAkJPEZpbGUNCisgCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcdGV4dFxTdHJpbmdCdWlsZGVyLmNwcCINCisgCQkJPg0K
KyAJCTwvRmlsZT4NCisgCQk8RmlsZQ0KICAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0Zlx0ZXh0
XFN0cmluZ0J1aWxkZXIuaCINCiAgCQkJPg0KICAJCTwvRmlsZT4NCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovanNjL2pzYy52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL2pzYy9qc2MudmNwcm9qCShyZXZp
c2lvbiA2OTYxNSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9qc2Mv
anNjLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM0LDYgKzMzNCwxMCBAQAogCQkJPg0KIAkJ
PC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxp
bmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmVcU3RyaW5nQnVpbGRlci5jcHAiDQorCQkJPg0K
KwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGly
KVxpbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmVcU3RyaW5nSW1wbC5jcHAiDQogCQkJPg0K
IAkJPC9GaWxlPg0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjk2MTUpCisrKyBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDUsNiArMjA1LDcgQEAKIAkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1
IC8qIFBhZ2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjJBRjRC
NjEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERl
Y2ltYWxOdW1iZXIuaCAqLzsgfTsKIAkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODYzQjIzREYwRkM2MEU2MjAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg2
NDM4RkM0MTI2NTUwM0UwMEUwREZDQSAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NDM4RkMzMTI2NTUwM0UwMEUwREZD
QSAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLzsgfTsKIAkJODY1NjU3NDIxMTVCRTNEQTAwMjkxRjQw
IC8qIENTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY1NjU3NDAxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwICovOyB9OwogCQk4
NjU2NTc0MzExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1NjU3NDExMTVCRTNEQTAwMjkxRjQwIC8qIENT
dHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4NjVGNDA4ODEwRTdENTYzMDA5NDczNjEgLyogQVBJU2hpbXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NUY0MDg3MTBFN0Q1NjMwMDk0NzM2MSAv
KiBBUElTaGltcy5oICovOyB9OwpAQCAtODA4LDYgKzgwOSw3IEBACiAJCTg2MjdFNUVBMTFGMTI4
MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYWdlQWxsb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2M0IyM0RGMEZDNjBFNjIwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2NDM4RkMzMTI2NTUwM0UwMEUw
REZDQSAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFN0cmluZ0J1aWxkZXIuY3BwOyBwYXRoID0gdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1NjU3NDAxMTVCRTNEQTAwMjkxRjQwIC8q
IENTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1N0cmlu
Zy5jcHA7IHBhdGggPSB0ZXh0L0NTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjU2NTc0MTExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBDU3RyaW5nLmg7IHBhdGggPSB0ZXh0L0NTdHJpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1RjQwODcxMEU3RDU2MzAwOTQ3MzYxIC8qIEFQ
SVNoaW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVNoaW1zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODM2LDYgKzE4MzgsNyBAQAogCQkJCTg2NTY1
NzQwMTE1QkUzREEwMDI5MUY0MCAvKiBDU3RyaW5nLmNwcCAqLywKIAkJCQk4NjU2NTc0MTExNUJF
M0RBMDAyOTFGNDAgLyogQ1N0cmluZy5oICovLAogCQkJCTg2Qjk5QUUxMTE3RTU3ODEwMERGNUE5
MCAvKiBTdHJpbmdCdWZmZXIuaCAqLywKKwkJCQk4NjQzOEZDMzEyNjU1MDNFMDBFMERGQ0EgLyog
U3RyaW5nQnVpbGRlci5jcHAgKi8sCiAJCQkJMDgxNDY5NDgxMjY0Mzc1RTAwREZGOTM1IC8qIFN0
cmluZ0J1aWxkZXIuaCAqLywKIAkJCQk4NjhCRkEwNTExN0NFRkQxMDBCOTA4QjEgLyogU3RyaW5n
SGFzaC5oICovLAogCQkJCTg2OEJGQTA2MTE3Q0VGRDEwMEI5MDhCMSAvKiBTdHJpbmdJbXBsLmNw
cCAqLywKQEAgLTI3ODAsNiArMjc4Myw3IEBACiAJCQkJOTcxNEFGNUUxMjJGMzIwNzAwOTJEOUY1
IC8qIFBhcnNlZFVSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBE
NDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYx
MzEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJl
dmlzaW9uIDY5NjE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgU3RyaW5naWZpZXI6OmFwcGVu
ZFF1b3RlZFN0cmluZyhVU3QKICAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CiAKICAg
ICAvLyBTdHJpbmcgbGVuZ3RoIHBsdXMgMiBmb3IgcXVvdGUgbWFya3MgcGx1cyA4IHNvIHdlIGNh
biBhY2NvbW9kYXRlIGEgZmV3IGVzY2FwZWQgY2hhcmFjdGVycy4KLSAgICBidWlsZGVyLnJlc2Vy
dmVDYXBhY2l0eShidWlsZGVyLnNpemUoKSArIGxlbmd0aCArIDIgKyA4KTsKKyAgICBidWlsZGVy
LnJlc2VydmVDYXBhY2l0eShidWlsZGVyLmxlbmd0aCgpICsgbGVuZ3RoICsgMiArIDgpOwogCiAg
ICAgYnVpbGRlci5hcHBlbmQoJyInKTsKIApAQCAtNTIxLDcgKzUyMSw3IEBAIGJvb2wgU3RyaW5n
aWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAvLyBMYXN0IHRpbWUgdGhyb3VnaCwg
ZmluaXNoIHVwIGFuZCByZXR1cm4gZmFsc2UuCiAgICAgaWYgKG1faW5kZXggPT0gbV9zaXplKSB7
CiAgICAgICAgIHN0cmluZ2lmaWVyLnVuaW5kZW50KCk7Ci0gICAgICAgIGlmIChtX3NpemUgJiYg
YnVpbGRlcltidWlsZGVyLnNpemUoKSAtIDFdICE9ICd7JykKKyAgICAgICAgaWYgKG1fc2l6ZSAm
JiBidWlsZGVyW2J1aWxkZXIubGVuZ3RoKCkgLSAxXSAhPSAneycpCiAgICAgICAgICAgICBzdHJp
bmdpZmllci5zdGFydE5ld0xpbmUoYnVpbGRlcik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1f
aXNBcnJheSA/ICddJyA6ICd9Jyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2Miw3ICs1
NjIsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICByb2xsQmFja1BvaW50ID0gYnVpbGRlci5zaXplKCk7CisgICAgICAgIHJvbGxCYWNr
UG9pbnQgPSBidWlsZGVyLmxlbmd0aCgpOwogCiAgICAgICAgIC8vIEFwcGVuZCB0aGUgc2VwYXJh
dG9yIHN0cmluZy4KICAgICAgICAgaWYgKGJ1aWxkZXJbcm9sbEJhY2tQb2ludCAtIDFdICE9ICd7
JykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0J1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmdCdWlsZGVyLmgJKHJldmlzaW9u
IDY5NjE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nQnVpbGRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwyMyArMzIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFVT
dHJpbmdCdWlsZGVyIDogcHVibGljIFN0cmluZ0J1aWxkZXIgewogcHVibGljOgotICAgIC8vIEZv
cndhcmQgZGVjbGFyZSB0aGVzZSBtZXRob2RzLCBvdGhlcndoaXNlIGFwcGVuZCgpIGlzIGFtYmln
aW91cy4KLSAgICB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciB1KSB7IFN0cmluZ0J1aWxkZXI6OmFw
cGVuZCh1KTsgfQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIHN0cikgeyBTdHJpbmdCdWls
ZGVyOjphcHBlbmQoc3RyKTsgfQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIHN0ciwgc2l6
ZV90IGxlbikgeyBTdHJpbmdCdWlsZGVyOjphcHBlbmQoc3RyLCBsZW4pOyB9Ci0gICAgdm9pZCBh
cHBlbmQoY29uc3QgVUNoYXIqIHN0ciwgc2l6ZV90IGxlbikgeyBTdHJpbmdCdWlsZGVyOjphcHBl
bmQoc3RyLCBsZW4pOyB9CisgICAgdXNpbmcgU3RyaW5nQnVpbGRlcjo6YXBwZW5kOworICAgIHZv
aWQgYXBwZW5kKGNvbnN0IFVTdHJpbmcmIHN0cikgeyBhcHBlbmQoU3RyaW5nKHN0ci5pbXBsKCkp
KTsgfQogCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgVVN0cmluZyYgc3RyKQotICAgIHsKLSAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSk7Ci0gICAg
fQotCi0gICAgVVN0cmluZyB0b1VTdHJpbmcoKQotICAgIHsKLSAgICAgICAgbV9idWZmZXIuc2hy
aW5rVG9GaXQoKTsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyLmRhdGEoKSB8fCAhbV9idWZmZXIu
c2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIFVTdHJpbmc6OmFkb3B0KG1fYnVmZmVyKTsKLSAgICB9
CisgICAgVVN0cmluZyB0b1VTdHJpbmcoKSB7IHJldHVybiB0b1N0cmluZygpLmltcGwoKTsgfQog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiA2OTYxNSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQCBTRVQoV1RGX1NPVVJDRVMKIAogICAgIHRl
eHQvQXRvbWljU3RyaW5nLmNwcAogICAgIHRleHQvQ1N0cmluZy5jcHAKKyAgICB0ZXh0L1N0cmlu
Z0J1aWxkZXIuY3BwCiAgICAgdGV4dC9TdHJpbmdJbXBsLmNwcAogICAgIHRleHQvU3RyaW5nU3Rh
dGljcy5jcHAKICAgICB0ZXh0L1dURlN0cmluZy5jcHAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZp
c2lvbiA2OTYxNSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw2ICsyMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9XVEZUaHJlYWREYXRhLmNw
cCBcCiAgICAgd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCBcCiAgICAgd3RmL3RleHQvQ1N0cmlu
Zy5jcHAgXAorICAgIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIFwKICAgICB3dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcCBcCiAgICAgd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAgXAogICAgIHd0
Zi90ZXh0L1dURlN0cmluZy5jcHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKworI2luY2x1ZGUgIldURlN0cmluZy5oIgor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBTdHJpbmdCdWlsZGVyOjpyZWlmeVN0cmluZygpCit7
CisgICAgLy8gQ2hlY2sgaWYgdGhlIHN0cmluZyBhbHJlYWR5IGV4aXN0cy4KKyAgICBpZiAoIW1f
c3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVChtX3N0cmluZy5sZW5ndGgoKSA9PSBt
X2xlbmd0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgZW1w
dHkuCisgICAgaWYgKCFtX2xlbmd0aCkgeworICAgICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6
OmVtcHR5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBNdXN0IGJlIHZhbGlk
IGluIHRoZSBidWZmZXIsIHRha2UgYSBzdWJzdHJpbmcgKHVubGVzcyBzdHJpbmcgZmlsbHMgdGhl
IGJ1ZmZlcikuCisgICAgQVNTRVJUKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDw9IG1fYnVmZmVyLT5s
ZW5ndGgoKSk7CisgICAgbV9zdHJpbmcgPSAobV9sZW5ndGggPT0gbV9idWZmZXItPmxlbmd0aCgp
KQorICAgICAgICA/IG1fYnVmZmVyLmdldCgpCisgICAgICAgIDogU3RyaW5nSW1wbDo6Y3JlYXRl
KG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6cmVzaXpl
KHVuc2lnbmVkIG5ld1NpemUpCit7CisgICAgLy8gQ2hlY2sgbmV3U2l6ZSA8IG1fbGVuZ3RoLCBo
ZW5jZSBtX2xlbmd0aCA+IDAuCisgICAgQVNTRVJUKG5ld1NpemUgPD0gbV9sZW5ndGgpOworICAg
IGlmIChuZXdTaXplID09IG1fbGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1f
bGVuZ3RoKTsKKworICAgIC8vIElmIHRoZXJlIGlzIGEgYnVmZmVyLCB3ZSBvbmx5IG5lZWQgdG8g
ZHVwbGljYXRlIGl0IGlmIGl0IGhhcyBtb3JlIHRoYW4gb25lIHJlZi4KKyAgICBpZiAobV9idWZm
ZXIpIHsKKyAgICAgICAgaWYgKCFtX2J1ZmZlci0+aGFzT25lUmVmKCkpCisgICAgICAgICAgICBh
bGxvY2F0ZUJ1ZmZlcihtX2J1ZmZlci0+Y2hhcmFjdGVycygpLCBtX2J1ZmZlci0+bGVuZ3RoKCkp
OworICAgICAgICBtX2xlbmd0aCA9IG5ld1NpemU7CisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5n
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTaW5jZSBtX2xlbmd0aCAmJiAh
bV9idWZmZXIsIHRoZSBzdHJpbmcgbXVzdCBiZSB2YWxpZCBpbiBtX3N0cmluZywgYW5kIG1fc3Ry
aW5nLmxlbmd0aCgpID4gMC4KKyAgICBBU1NFUlQoIW1fc3RyaW5nLmlzRW1wdHkoKSk7CisgICAg
QVNTRVJUKG1fbGVuZ3RoID09IG1fc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBBU1NFUlQobmV3U2l6
ZSA8IG1fc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBtX2xlbmd0aCA9IG5ld1NpemU7CisgICAgbV9z
dHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGUobV9zdHJpbmcuaW1wbCgpLCAwLCBuZXdTaXplKTsK
K30KKwordm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2Fw
YWNpdHkpCit7CisgICAgaWYgKG1fYnVmZmVyKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGFs
cmVhZHkgYSBidWZmZXIsIHRoZW4gZ3JvdyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChuZXdD
YXBhY2l0eSA+IG1fYnVmZmVyLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVy
KG1fYnVmZmVyLT5jaGFyYWN0ZXJzKCksIG5ld0NhcGFjaXR5KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBHcm93IHRoZSBzdHJpbmcsIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKG5ld0Nh
cGFjaXR5ID4gbV9sZW5ndGgpCisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX3N0cmluZy5j
aGFyYWN0ZXJzKCksIG5ld0NhcGFjaXR5KTsKKyAgICB9Cit9CisKKy8vIEFsbG9jYXRlIGEgbmV3
IGJ1ZmZlciwgY29weWluZyBpbiBjdXJyZW50Q2hhcmFjdGVycyAodGhlc2UgbWF5IGNvbWUgZnJv
bSBlaXRoZXIgbV9zdHJpbmcKKy8vIG9yIG1fYnVmZmVyLCAgbmVpdGhlciB3aWxsIGJlIHJlYXNz
aWduZWQgdW50aWwgdGhlIGNvcHkgaGFzIGNvbXBsZXRlZCkuCit2b2lkIFN0cmluZ0J1aWxkZXI6
OmFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCit7CisgICAgLy8gQ29weSB0aGUgZXhpc3RpbmcgZGF0YSBpbnRvIGEg
bmV3IGJ1ZmZlciwgc2V0IHJlc3VsdCB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGlu
ZyBkYXRhLgorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBidWZmZXIgPSBTdHJpbmdJbXBsOjpjcmVh
dGVVbmluaXRpYWxpemVkKHJlcXVpcmVkTGVuZ3RoLCBtX2J1ZmZlckNoYXJhY3RlcnMpOworICAg
IG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJm
bG93LgorCisgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgorICAgIG1fYnVmZmVyID0g
YnVmZmVyLnJlbGVhc2UoKTsKKyAgICBtX3N0cmluZyA9IFN0cmluZygpOworfQorCisvLyBNYWtl
ICdsZW5ndGgnIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1
cGRhdGUgbV9zdHJpbmcgJiBtX2xlbmd0aCwKKy8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5l
d2x5IGFsbG9jYXRlZCBzdG9yYWdlLgorVUNoYXIqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsZW5ndGgpOworCisgICAg
Ly8gQ2FsY3VhdGUgdGhlIG5ldyBzaXplIG9mIHRoZSBidWlsZGVyIGFmdGVyIGFwcGVuZGluZy4K
KyAgICB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCA9IGxlbmd0aCArIG1fbGVuZ3RoOworICAgIGlm
IChyZXF1aXJlZExlbmd0aCA8IGxlbmd0aCkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIGlmICht
X2J1ZmZlcikgeworICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUg
YXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQorICAgICAg
ICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKKworICAgICAgICAvLyBD
aGVjayBpZiB0aGUgYnVmZmVyIGFscmVhZHkgaGFzIHN1ZmZpY2llbnQgY2FwYWNpdHkuCisgICAg
ICAgIGlmIChyZXF1aXJlZExlbmd0aCA8PSBtX2J1ZmZlci0+bGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBtX2xlbmd0aDsKKyAgICAgICAgICAgIG1fc3Ry
aW5nID0gU3RyaW5nKCk7CisgICAgICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyQ2hhcmFjdGVycyArIGN1cnJlbnRMZW5ndGg7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBXZSBuZWVkIHRvIHJlYWxsb2MgdGhlIGJ1ZmZlci4KKyAg
ICAgICAgYWxsb2NhdGVCdWZmZXIobV9idWZmZXItPmNoYXJhY3RlcnMoKSwgc3RkOjptYXgocmVx
dWlyZWRMZW5ndGgsIG1fYnVmZmVyLT5sZW5ndGgoKSAqIDIpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOworICAgICAgICBhbGxv
Y2F0ZUJ1ZmZlcihtX3N0cmluZy5jaGFyYWN0ZXJzKCksIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3Ro
LCByZXF1aXJlZExlbmd0aCAqIDIpKTsKKyAgICB9CisKKyAgICBVQ2hhciogcmVzdWx0ID0gbV9i
dWZmZXJDaGFyYWN0ZXJzICsgbV9sZW5ndGg7CisgICAgbV9sZW5ndGggPSByZXF1aXJlZExlbmd0
aDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghbGVu
Z3RoKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGNoYXJhY3RlcnMpOworCisgICAgbWVt
Y3B5KGFwcGVuZFVuaW5pdGlhbGl6ZWQobGVuZ3RoKSwgY2hhcmFjdGVycywgc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpICogMik7Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNv
bnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKKworICAgIFVDaGFy
KiBkZXN0ID0gYXBwZW5kVW5pbml0aWFsaXplZChsZW5ndGgpOworICAgIGNvbnN0IGNoYXIqIGVu
ZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CisgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBlbmQpCisg
ICAgICAgICooZGVzdCsrKSA9ICooY29uc3QgdW5zaWduZWQgY2hhciopKGNoYXJhY3RlcnMrKyk7
Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQoreworICAgIC8vIElmIHRo
ZSBidWZmZXIgaXMgYXQgbGVhc3QgODAlIGZ1bGwsIGRvbid0IGJvdGhlciBjb3B5aW5nLiBOZWVk
IHRvIHR1bmUgdGhpcyBoZXVyaXN0aWMhCisgICAgaWYgKG1fYnVmZmVyICYmIG1fYnVmZmVyLT5s
ZW5ndGgoKSA+IChtX2xlbmd0aCArIChtX2xlbmd0aCA+PiAyKSkpIHsKKyAgICAgICAgVUNoYXIq
IHJlc3VsdDsKKyAgICAgICAgbV9zdHJpbmcgPSBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoLCByZXN1bHQpOworICAgICAgICBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlci0+
Y2hhcmFjdGVycygpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIDIpOyAvLyBUaGlz
IGNhbid0IG92ZXJmbG93LgorICAgICAgICBtX2J1ZmZlciA9IDA7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXVEYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWlsZGVy
LmgJKHJldmlzaW9uIDY5NjE1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw1NyArMzMsMTAzIEBAIG5hbWVzcGFjZSBXVEYgewog
CiBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKIHB1YmxpYzoKLSAgICB2b2lkIGFwcGVuZChjb25zdCBV
Q2hhciB1KQorICAgIFN0cmluZ0J1aWxkZXIoKQorICAgICAgICA6IG1fbGVuZ3RoKDApCiAgICAg
ewotICAgICAgICBtX2J1ZmZlci5hcHBlbmQodSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQo
Y29uc3QgY2hhciogc3RyKQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQp
OworICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CisKKyAgICB2b2lkIGFw
cGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGFwcGVuZChzdHIsIHN0
cmxlbihzdHIpKTsKKyAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0
cmluZywgYW5kIHRoZXJlIGlzIG5vdCBidWZmZXIKKyAgICAgICAgLy8gKGluIGNhc2UgcmVzZXJ2
ZUNhcGFjaXR5IGhhcyBiZWVuIGNhbGxlZCkgdGhlbiBqdXN0IHJldGFpbiB0aGUKKyAgICAgICAg
Ly8gc3RyaW5nLgorICAgICAgICBpZiAoIW1fbGVuZ3RoICYmICFtX2J1ZmZlcikgeworICAgICAg
ICAgICAgbV9zdHJpbmcgPSBzdHJpbmc7CisgICAgICAgICAgICBtX2xlbmd0aCA9IHN0cmluZy5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQo
c3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2b2lk
IGFwcGVuZChjb25zdCBjaGFyKiBzdHIsIHNpemVfdCBsZW4pCisgICAgdm9pZCBhcHBlbmQoY29u
c3QgY2hhciogY2hhcmFjdGVycykKICAgICB7Ci0gICAgICAgIHJlc2VydmVDYXBhY2l0eShtX2J1
ZmZlci5zaXplKCkgKyBsZW4pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsg
aSsrKQotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KHN0cltpXSkpOworICAgICAgICBpZiAoY2hhcmFjdGVycykKKyAgICAgICAgICAgIGFwcGVu
ZChjaGFyYWN0ZXJzLCBzdHJsZW4oY2hhcmFjdGVycykpOwogICAgIH0KIAotICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IFVDaGFyKiBzdHIsIHNpemVfdCBsZW4pCisgICAgdm9pZCBhcHBlbmQoVUNoYXIg
YykKICAgICB7Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZChzdHIsIGxlbik7CisgICAgICAgIGlm
IChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBtX3N0cmluZy5p
c051bGwoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyc1ttX2xlbmd0aCsrXSA9IGM7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZCgmYywgMSk7CiAgICAgfQogCi0gICAg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgdm9pZCBhcHBlbmQoY2hhciBjKQog
ICAgIHsKLSAgICAgICAgbV9idWZmZXIuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5n
dGgoKSk7CisgICAgICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5n
dGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVy
c1ttX2xlbmd0aCsrXSA9ICh1bnNpZ25lZCBjaGFyKWM7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFwcGVuZCgmYywgMSk7CiAgICAgfQogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXIuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkoc2l6
ZV90IG5ld0NhcGFjaXR5KQorICAgIFN0cmluZyB0b1N0cmluZygpCiAgICAgewotICAgICAgICBp
ZiAobmV3Q2FwYWNpdHkgPCBtX2J1ZmZlci5jYXBhY2l0eSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoc3RkOjptYXgobmV3Q2FwYWNpdHks
IG1fYnVmZmVyLmNhcGFjaXR5KCkgKyBtX2J1ZmZlci5jYXBhY2l0eSgpIC8gNCArIDEpKTsKKyAg
ICAgICAgaWYgKG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBzaHJpbmtUb0ZpdCgp
OworICAgICAgICAgICAgcmVpZnlTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bV9zdHJpbmc7CiAgICAgfQotICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKSB7IG1fYnVmZmVy
LnJlc2l6ZShzaXplKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXIuc2l6ZSgpOyB9Ci0gICAgLy8gRklYTUU6IHJlbW92ZSBzaXplKCksIGFib3ZlIChzdHJpbmdz
IGhhdmUgYSBsZW5ndGgsIG5vdCBhIHNpemUpLgotICAgIC8vIGFsc28sIHNob3VsZCByZXR1cm4g
YW4gdW5zaWduZWQsIG5vdCBhIHNpemVfdC4KLSAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZSgpOyB9CiAKLSAgICBVQ2hhciBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci5hdChpKTsgfQorICAgIFN0cmluZyB0b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmVpZnlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgIH0KIAotICAg
IFN0cmluZyB0b1N0cmluZygpCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiAhbGVuZ3RoKCk7IH0KKworICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHVuc2ln
bmVkIG5ld0NhcGFjaXR5KTsKKworICAgIHZvaWQgcmVzaXplKHVuc2lnbmVkIG5ld1NpemUpOwor
CisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworCisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdAogICAgIHsKLSAgICAgICAgbV9idWZmZXIuc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgQVNTRVJUKG1fYnVmZmVyLmRhdGEoKSB8fCAhbV9idWZmZXIuc2l6ZSgpKTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6YWRvcHQobV9idWZmZXIpOworICAgICAgICBBU1NFUlQoaSA8IG1fbGVu
Z3RoKTsKKyAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBtX3N0cmluZ1tpXTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLT5jaGFyYWN0ZXJzKClbaV07CiAgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgVmVj
dG9yPFVDaGFyLCA2ND4gbV9idWZmZXI7CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAg
ICBtX2xlbmd0aCA9IDA7CisgICAgICAgIG1fc3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAgIG1f
YnVmZmVyID0gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbGxvY2F0ZUJ1ZmZlcihj
b25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKTsK
KyAgICBVQ2hhciogYXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIHZv
aWQgcmVpZnlTdHJpbmcoKTsKKworICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIFN0cmluZyBt
X3N0cmluZzsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7CisgICAgVUNoYXIqIG1f
YnVmZmVyQ2hhcmFjdGVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5
NjczKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxMC0xMC0xMyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQz
OTg3IC0gRG93bmxvYWRpbmcgdXNpbmcgWEhSIGlzIG11Y2ggc2xvd2VyIHRoYW4gYmVmb3JlCisK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aFN0cmluZ0J1aWxkZXI6OnJlc3VsdCk6CisgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyOjpzaXplKCkgLT4gU3RyaW5nQnVpbGRlcjo6bGVuZ3RoKCkuCisKIDIwMTAtMTAtMTMgIEpv
aG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU3RldmUgQmxvY2suCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3Bw
CShyZXZpc2lvbiA2OTYxNSkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFN0cmluZyBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6cmVzdWx0KCkKIHsKLSAgICB1bnNpZ25lZCBz
aXplID0gbV9zdHJpbmdCdWlsZGVyLnNpemUoKTsKKyAgICB1bnNpZ25lZCBzaXplID0gbV9zdHJp
bmdCdWlsZGVyLmxlbmd0aCgpOwogICAgIGlmICghc2l6ZSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCg==
</data>
<flag name="review"
          id="60497"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70635</attachid>
            <date>2010-10-13 11:27:44 -0700</date>
            <delta_ts>2010-10-13 11:39:30 -0700</delta_ts>
            <desc>[PART II] Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder</desc>
            <filename>XHRFix.2.patch</filename>
            <type>text/plain</type>
            <size>50800</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjkgQEAKKzIwMTAtMTAtMTMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzk4NworICAg
ICAgICBTd2l0Y2ggWE1MSHR0cFJlcXVlc3QsIEZpbGVSZWFkZXIsIGFuZCBGaWxlUmVhZGVyU3lu
YyB0byB1c2UgYSBTdHJpbmdidWlsZGVyCisgICAgICAgIHRvIGNvbnN0cnVjdCB0aGVpciBpbnRl
cm5hbCByZXN1bHQgc3RyaW5nLiAgUmVtb3ZlIFNjcmlwdFN0cmluZyAodGhpcyBpcyBub3cKKyAg
ICAgICAgcmVkdW5kYW50KS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anNPd25lZFN0cmluZ09yTnVsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRl
eHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
YWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2Fs
bFN0YWNrLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpGaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXI6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmRp
ZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwpOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlci5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmNMb2FkZXI6OkZpbGVSZWFkZXJTeW5jTG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6cmVhZEFzQmluYXJ5U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpyZWFkQXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpyZWFkQXNEYXRhVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFk
ZXJTeW5jOjpjb252ZXJ0VG9UZXh0KToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5j
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6cmVhZEFzVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6RmlsZVJlYWRlclN5bmMpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UmVzb3VyY2U6OnNldE92ZXJyaWRlQ29udGVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlLmg6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAg
ICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaDoKKyAgICAg
ICAgKiB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oOgorICAgICAgICAqIHhtbC9YTUxIdHRw
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpjbGVhclJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTEzICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3Niw3ICs4NzYs
NiBAQAogCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUJEMEVE
RjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwICovOyB9OwogCQk0MTZFNzVDQjBF
REY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDOTBFREY5MEM3MDAzNjBFMUQgLyogU2Ny
aXB0Q2FsbEZyYW1lLmggKi87IH07CiAJCTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAvKiBTY3Jp
cHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi87
IH07Ci0JCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEw
MDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0MTg4NUI5MzExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1p
c3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
ODg1QjkxMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxODg1Qjk0MTFCNkZEQTYwMDMz
ODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTg4NUI5MjExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Np
b24uY3BwICovOyB9OwogCQk0MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdv
cmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MThGODgwMjBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgKi87IH07CkBA
IC02ODk5LDcgKzY4OTgsNiBAQAogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0
Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlw
dENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkU3NUM5MEVE
RjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNj
cmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdHJp
bmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE4ODVCOTExMUI2RkRBNjAwMzM4
M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvcm1TdWJtaXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxODg1Qjky
MTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtU3VibWlzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxOEY4ODAyMEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWJzdHJhY3RXb3Jr
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY3NDgsNyArMTY3NDYsNiBA
QAogCQkJCUNFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5o
ICovLAogCQkJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8s
CiAJCQkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8sCi0JCQkJ
NDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovLAogCQkJCTkzNEND
MERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0MwRTAw
RUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCiAJCQkJMjI4QzI4NDQxMEQ4MjUw
MDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovLApAQCAtMjA0ODcsNyArMjA0ODQsNiBA
QAogCQkJCTkzNENDMTBBMEVEQjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxQzc2MEIxMEVERTAzRDMwMEMxNjU1RiAv
KiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIx
NUI2IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0Q0MwRTIwRUQzOUQ2
RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyMjhDMjg0NTEw
RDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
QTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCBpbiBIZWFkZXJzICov
LApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gNjk2MTUp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1Miw2ICs0NTIsMTMgQEAgSlNWYWx1ZSBqc1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4
ZWMsIAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKIH0KIAorSlNWYWx1ZSBqc093bmVk
U3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlm
IChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzT3du
ZWRTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5nKHMpKTsKK30KKwogSlNWYWx1ZSBqc093bmVk
U3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcykKIHsKICAgICBp
ZiAocy5pc051bGwoKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gNjk2MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTQsNiArMjU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8g
U2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFu
eSBVU3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCiAgICAgLy8gb2JqZWN0
LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3Jh
cHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KKyAgICBKU0M6OkpTVmFsdWUganNPd25l
ZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAKICAgICBKU0M6
OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
VVN0cmluZyYpOyAKIAogICAgIFN0cmluZyBpZGVudGlmaWVyVG9TdHJpbmcoY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3
IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKIEpTVmFsdWUgSlNY
TUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUZXh0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHRleHQgPSBp
bXBsKCktPnJlc3BvbnNlVGV4dChlYyk7CisgICAgU3RyaW5nIHRleHQgPSBpbXBsKCktPnJlc3Bv
bnNlVGV4dChlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0
Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUoY29uc3QgVVN0cmluZyYgZnVuY3Rpb25OYW1lLCBj
b25zdCBVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQotICAgIDogbV9mdW5jdGlvbk5hbWUoZnVuY3Rp
b25OYW1lKQorICAgIDogbV9mdW5jdGlvbk5hbWUodXN0cmluZ1RvU3RyaW5nKGZ1bmN0aW9uTmFt
ZSkpCiAgICAgLCBtX3NvdXJjZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVzdHJpbmdUb1N0cmluZyh1
cmxTdHJpbmcpKQogICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCiB7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyAr
MzMsNiBAQAogCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5o
PgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01Myw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6VVN0cmluZyYgZnVuY3Rp
b25OYW1lLCBjb25zdCBKU0M6OlVTdHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1iZXIsIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpOwogICAgICAgICB+U2Ny
aXB0Q2FsbEZyYW1lKCk7CiAKLSAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nJiBmdW5jdGlvbk5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQorICAgICAgICBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25OYW1lOyB9CiAgICAg
ICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMOyB9
CiAgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1i
ZXI7IH0KIApAQCAtNjIsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFNjcmlwdFN0cmluZyBtX2Z1bmN0aW9uTmFtZTsK
KyAgICAgICAgU3RyaW5nIG1fZnVuY3Rpb25OYW1lOwogICAgICAgICBLVVJMIG1fc291cmNlVVJM
OwogICAgICAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FsbFN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWxsU3RhY2suaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhbGxTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAK
ICNpbmNsdWRlICJTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgot
I2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYg
QEAKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTIsMTEgKzUxLDYgQEAg
dm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcgogICAgIG1fYXJndW1lbnRz
LmFwcGVuZChhcmd1bWVudC5qc09iamVjdCgpKTsKIH0KIAotdm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmIGFyZ3VtZW50KQot
ewotICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50LnVzdHJp
bmcoKSkpOwotfQotCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3Vt
ZW50KGNvbnN0IFNjcmlwdFZhbHVlJiBhcmd1bWVudCkKIHsKICAgICBtX2FyZ3VtZW50cy5hcHBl
bmQoYXJndW1lbnQuanNWYWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRG
dW5jdGlvbkNhbGwuaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRWYWx1
ZTsKLSAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CiAKICAgICBjbGFzcyBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXIoU2NyaXB0U3RhdGUqIHN0YXRlKSA6IG1fZXhlYyhzdGF0ZSkgeyB9CiAKICAgICAgICAgdm9p
ZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmKTsKLSAgICAgICAgdm9pZCBhcHBl
bmRBcmd1bWVudChjb25zdCBTY3JpcHRTdHJpbmcmKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1
bWVudChjb25zdCBTY3JpcHRWYWx1ZSYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNv
bnN0IFN0cmluZyYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqKTsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaAkocmV2aXNpb24gNjk2MTUpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTY3JpcHRTdHJpbmdfaAotI2RlZmluZSBTY3JpcHRTdHJpbmdf
aAotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9VU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgU2NyaXB0U3RyaW5nIHsKLXB1YmxpYzoKLSAgICBTY3JpcHRTdHJp
bmcoKSB7fQotICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyKHMpIHt9Ci0g
ICAgU2NyaXB0U3RyaW5nKGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cihzdHJpbmdUb1VTdHJpbmco
cykpIHt9Ci0gICAgU2NyaXB0U3RyaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYgcykgOiBtX3N0cihz
KSB7fQotCi0gICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHI7
IH0KLSAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdCB7IHJldHVybiB1c3RyaW5nVG9TdHJpbmco
bV9zdHIpOyB9Ci0gICAgY29uc3QgSlNDOjpVU3RyaW5nJiB1c3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdHI7IH0KLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHIuaXNO
dWxsKCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLmxlbmd0aCgp
OyB9Ci0KLSAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKQotICAgIHsK
LSAgICAgICAgbV9zdHIgPSBzOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAg
U2NyaXB0U3RyaW5nJiBvcGVyYXRvcis9KGNvbnN0IFN0cmluZyYgcykKLSAgICB7Ci0gICAgICAg
IEpTQzo6VVN0cmluZ0J1aWxkZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYXBwZW5kKG1fc3Ry
KTsKLSAgICAgICAgYnVmZmVyLmFwcGVuZChzdHJpbmdUb1VTdHJpbmcocykpOwotICAgICAgICBt
X3N0ciA9IGJ1ZmZlci50b1VTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY3JpcHRTdHJpbmcmIHMpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9zdHIgPT0gcy5tX3N0cjsKLSAgICB9Ci0KLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgU2NyaXB0U3RyaW5nJiBzKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8g
QXZvaWQgZXhwb3J0aW5nIGFuIGV4dHJhIHN5bWJvbCBieSByZS11c2luZyAiPT0iIG9wZXJhdG9y
LgotICAgICAgICByZXR1cm4gIShtX3N0ciA9PSBzLm1fc3RyKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSlNDOjpVU3RyaW5nIG1fc3RyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gU2NyaXB0U3RyaW5nX2gKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNlbmRpZgogICAgIGNsYXNzIE1lc3NhZ2VQb3J0OwogICAgIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOwotICAgIGNsYXNzIFNjcmlwdFN0cmluZzsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5jcHAJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUHJvZ3Jlc3NF
dmVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNp
bmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCkBAIC01Nyw3ICs1OCw2IEBAIEZpbGVS
ZWFkZXI6OkZpbGVSZWFkZXIoU2NyaXB0RXhlY3V0aW9uQ28KICAgICA6IEFjdGl2ZURPTU9iamVj
dChjb250ZXh0LCB0aGlzKQogICAgICwgbV9zdGF0ZShOb25lKQogICAgICwgbV9yZWFkVHlwZShS
ZWFkRmlsZUFzQmluYXJ5U3RyaW5nKQotICAgICwgbV9yZXN1bHQoIiIpCiAgICAgLCBtX2lzUmF3
RGF0YUNvbnZlcnRlZChmYWxzZSkKICAgICAsIG1fYnl0ZXNMb2FkZWQoMCkKICAgICAsIG1fdG90
YWxCeXRlcygwKQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6YWJvcnQoKQog
CiAgICAgdGVybWluYXRlKCk7CiAKLSAgICBtX3Jlc3VsdCA9ICIiOworICAgIG1fYnVpbGRlci5j
bGVhcigpOwogICAgIG1fZXJyb3IgPSBGaWxlRXJyb3I6OmNyZWF0ZShBQk9SVF9FUlIpOwogCiAg
ICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKQEAgLTIxMiw3ICsyMTIsNyBA
QCB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoCiAKICAgICBzd2l0Y2gg
KG1fcmVhZFR5cGUpIHsKICAgICBjYXNlIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmc6Ci0gICAgICAg
IG1fcmVzdWx0ICs9IFN0cmluZyhkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVj
ZWl2ZWQpKTsKKyAgICAgICAgbV9idWlsZGVyLmFwcGVuZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSZWFkRmls
ZUFzVGV4dDoKICAgICBjYXNlIFJlYWRGaWxlQXNEYXRhVVJMOgpAQCAtMjk2LDMwICsyOTYsMzAg
QEAgRmlsZVJlYWRlcjo6UmVhZHlTdGF0ZSBGaWxlUmVhZGVyOjpyZWFkeQogICAgIHJldHVybiBF
TVBUWTsKIH0KIAotY29uc3QgU2NyaXB0U3RyaW5nJiBGaWxlUmVhZGVyOjpyZXN1bHQoKQorU3Ry
aW5nIEZpbGVSZWFkZXI6OnJlc3VsdCgpCiB7CiAgICAgLy8gSWYgcmVhZGluZyBhcyBiaW5hcnkg
c3RyaW5nLCB3ZSBjYW4gcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkuCiAgICAgaWYgKG1f
cmVhZFR5cGUgPT0gUmVhZEZpbGVBc0JpbmFyeVN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fcmVz
dWx0OworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiAKICAgICAvLyBJZiB3
ZSBhbHJlYWR5IGNvbnZlcnQgdGhlIHJhdyBkYXRhIHJlY2VpdmVkIHNvIGZhciwgd2UgY2FuIHJl
dHVybiB0aGUgcmVzdWx0IG5vdy4KICAgICBpZiAobV9pc1Jhd0RhdGFDb252ZXJ0ZWQpCi0gICAg
ICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygp
OwogICAgIG1faXNSYXdEYXRhQ29udmVydGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3JlYWRUeXBl
ID09IFJlYWRGaWxlQXNUZXh0KQogICAgICAgICBjb252ZXJ0VG9UZXh0KCk7CiAgICAgLy8gRm9y
IGRhdGEgVVJMLCB3ZSBvbmx5IGRvIHRoZSBjb3ZlcnNpb24gdW50aWwgd2UgcmVjZWl2ZSBhbGwg
dGhlIHJhdyBkYXRhLgogICAgIGVsc2UgaWYgKG1fcmVhZFR5cGUgPT0gUmVhZEZpbGVBc0RhdGFV
UkwgJiYgbV9zdGF0ZSA9PSBDb21wbGV0ZWQpCi0gICAgICAgIGNvbnZlcnRUb0RhdGFVUkwobV9y
YXdEYXRhLCBtX2ZpbGVUeXBlLCBtX3Jlc3VsdCk7CisgICAgICAgIGNvbnZlcnRUb0RhdGFVUkwo
bV9yYXdEYXRhLCBtX2ZpbGVUeXBlLCBtX2J1aWxkZXIpOwogCi0gICAgcmV0dXJuIG1fcmVzdWx0
OworICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVy
Ojpjb252ZXJ0VG9UZXh0KCkKIHsKICAgICBpZiAoIW1fcmF3RGF0YS5zaXplKCkpIHsKLSAgICAg
ICAgbV9yZXN1bHQgPSAiIjsKKyAgICAgICAgbV9idWlsZGVyLmNsZWFyKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTMzMCwyOCArMzMwLDMxIEBAIHZvaWQgRmlsZVJlYWRlcjo6Y29u
dmVydFRvVGV4dCgpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIHN1cHBvcnRpbmcgaW5jcmVtZW50
YWwgZGVjb2RpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZi4KICAgICBpZiAoIW1fZGVjb2RlcikKICAg
ICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWlu
IiwgbV9lbmNvZGluZy5pc1ZhbGlkKCkgPyBtX2VuY29kaW5nIDogVVRGOEVuY29kaW5nKCkpOwot
ICAgIG1fcmVzdWx0ID0gbV9kZWNvZGVyLT5kZWNvZGUoJm1fcmF3RGF0YS5hdCgwKSwgbV9yYXdE
YXRhLnNpemUoKSk7CisgICAgbV9idWlsZGVyLmNsZWFyKCk7CisgICAgbV9idWlsZGVyLmFwcGVu
ZChtX2RlY29kZXItPmRlY29kZSgmbV9yYXdEYXRhLmF0KDApLCBtX3Jhd0RhdGEuc2l6ZSgpKSk7
CiAKICAgICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1fZXJyb3IpCi0gICAgICAgIG1f
cmVzdWx0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgbV9idWlsZGVyLmFwcGVuZCht
X2RlY29kZXItPmZsdXNoKCkpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFV
UkwoY29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhLCBjb25zdCBTdHJpbmcmIGZpbGVUeXBlLCBT
Y3JpcHRTdHJpbmcmIHJlc3VsdCkKK3ZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChj
b25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIpCiB7Ci0gICAgcmVzdWx0ID0gImRhdGE6IjsKKyAgICBidWlsZGVy
LmNsZWFyKCk7CisgICAgYnVpbGRlci5hcHBlbmQoImRhdGE6Iik7CiAKICAgICBpZiAoIXJhd0Rh
dGEuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXN1bHQgKz0gZmlsZVR5cGU7Ci0g
ICAgaWYgKCFmaWxlVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdCArPSAiOyI7Ci0gICAg
cmVzdWx0ICs9ICJiYXNlNjQsIjsKKyAgICBpZiAoIWZpbGVUeXBlLmlzRW1wdHkoKSkgeworICAg
ICAgICBidWlsZGVyLmFwcGVuZChmaWxlVHlwZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI7
YmFzZTY0LCIpOworICAgIH0gZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiYmFzZTY0LCIp
OwogCiAgICAgVmVjdG9yPGNoYXI+IG91dDsKICAgICBiYXNlNjRFbmNvZGUocmF3RGF0YSwgb3V0
KTsKICAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIHJlc3VsdCArPSBvdXQuZGF0YSgpOworICAg
IGJ1aWxkZXIuYXBwZW5kKG91dC5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBACiAjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGaWxlRXJyb3IuaCIKICNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRTdHJp
bmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3LDExICs3
NywxMSBAQCBwdWJsaWM6CiAKICAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKICAg
ICBQYXNzUmVmUHRyPEZpbGVFcnJvcj4gZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAg
Y29uc3QgU2NyaXB0U3RyaW5nJiByZXN1bHQoKTsKKyAgICBTdHJpbmcgcmVzdWx0KCk7CiAKICAg
ICAvLyBIZWxwZXIgbWV0aG9kcywgYWxzbyB1c2VkIGJ5IEZpbGVSZWFkZXJTeW5jLgogICAgIHN0
YXRpYyBFeGNlcHRpb25Db2RlIGh0dHBTdGF0dXNDb2RlVG9FeGNlcHRpb25Db2RlKGludCBodHRw
U3RhdHVzQ29kZSk7Ci0gICAgc3RhdGljIHZvaWQgY29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0
b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFNjcmlwdFN0cmluZyYg
cmVzdWx0KTsKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYpOwog
CiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBj
b25zdDsKQEAgLTE0NywxMyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICBSZWFkVHlwZSBtX3JlYWRU
eXBlOwogICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwogCi0gICAgLy8gTGlrZSBYTUxIdHRw
UmVxdWVzdC5tX3Jlc3BvbnNlVGV4dCwgd2Uga2VlcCB0aGlzIGFzIGEgU2NyaXB0U3RyaW5nLCBu
b3QgYSBXVEY6OlN0cmluZy4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGVzZSBzdHJpbmdzIGNh
biBlYXNpbHkgZ2V0IGh1Z2UgKHRoZXkgYXJlIGZpbGxlZCBmcm9tIHRoZSBmaWxlKSBhbmQKLSAg
ICAvLyBiZWNhdXNlIEpTIGNhbiBlYXNpbHkgb2JzZXJ2ZSBtYW55IGludGVybWVkaWF0ZSBzdGF0
ZXMsIHNvIGl0J3MgdmVyeSB1c2VmdWwgdG8gYmUKLSAgICAvLyBhYmxlIHRvIHNoYXJlIHRoZSBi
dWZmZXIgd2l0aCBKYXZhU2NyaXB0IHZlcnNpb25zIG9mIHRoZSB3aG9sZSBvciBwYXJ0aWFsIHN0
cmluZy4KLSAgICAvLyBJbiBjb250cmFzdCwgdGhpcyBzdHJpbmcgZG9lc24ndCBpbnRlcmFjdCBt
dWNoIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGVuZ2luZSBzbyBpdCdzIG5vdCB0aGF0Ci0gICAgLy8g
YmlnIGEgY29zdCB0aGF0IGl0IGlzbid0IGEgU3RyaW5nLgotICAgIFNjcmlwdFN0cmluZyBtX3Jl
c3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKIAogICAgIC8vIFRoZSByYXcgZGF0
YS4gV2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgcmF3IGRhdGEgZm9yIGl0IHRvIGJl
IGNvbnZlcnRlZCB0byB0ZXh0IG9yIGRhdGEgVVJMIGRhdGEuCiAgICAgVmVjdG9yPGNoYXI+IG1f
cmF3RGF0YTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAkocmV2aXNpb24gNjk2
MTUpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGVS
ZWFkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKQEAg
LTUwLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsZVJlYWRlclN5bmNM
b2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8g
SWYgdGhlIG91dHB1dCByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdC4gT3RoZXJ3aXNlLCBzYXZl
IGl0IGFzIHRoZSByYXcgZGF0YS4KLSAgICBGaWxlUmVhZGVyU3luY0xvYWRlcihTY3JpcHRTdHJp
bmcqIHJlc3VsdCk7CisgICAgRmlsZVJlYWRlclN5bmNMb2FkZXIoU3RyaW5nQnVpbGRlciopOwog
CiAgICAgLy8gUmV0dXJucyB0aGUgaHR0cCBzdGF0dXMgY29kZS4KICAgICB2b2lkIHN0YXJ0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBFeGNlcHRpb25D
b2RlJik7CkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGUg
b3V0cHV0IHJlc3VsdC4gVGhlIGNhbGxlciBwcm92aWRlcyB0aGlzIGluIG9yZGVyIHRvIGxvYWQg
dGhlIGJpbmFyeSBkYXRhIGRpcmVjdGx5LgotICAgIFNjcmlwdFN0cmluZyogbV9yZXN1bHQ7Cisg
ICAgU3RyaW5nQnVpbGRlciogbV9idWlsZGVyOwogCiAgICAgLy8gVGhlIHJhdyBkYXRhLiBUaGUg
Y2FsbGVyIGRvZXMgbm90IHByb3ZpZGUgdGhlIGFib3ZlIG91dHB1dCByZXN1bHQgYW5kIHdlIG5l
ZWQgdG8gc2F2ZSBpdCBoZXJlLgogICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7CkBAIC03Myw4
ICs3NCw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1faHR0cFN0YXR1c0NvZGU7ICAgIAogfTsKIAot
RmlsZVJlYWRlclN5bmNMb2FkZXI6OkZpbGVSZWFkZXJTeW5jTG9hZGVyKFNjcmlwdFN0cmluZyog
cmVzdWx0KQotICAgIDogbV9yZXN1bHQocmVzdWx0KQorRmlsZVJlYWRlclN5bmNMb2FkZXI6OkZp
bGVSZWFkZXJTeW5jTG9hZGVyKFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpCisgICAgOiBtX2J1aWxk
ZXIoYnVpbGRlcikKICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKIHsKIH0KQEAgLTEwMCw4ICsx
MDEsOCBAQCB2b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZlUmVzCiAKIHZvaWQg
RmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBpZiAobV9yZXN1bHQpCi0gICAgICAgICptX3Jlc3Vs
dCArPSBTdHJpbmcoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7
CisgICAgaWYgKG1fYnVpbGRlcikKKyAgICAgICAgbV9idWlsZGVyLT5hcHBlbmQoZGF0YSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CiAgICAgZWxzZQogICAgICAgICBt
X3Jhd0RhdGEuYXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZl
ZCkpOwogfQpAQCAtMTE2LDM3ICsxMTcsMzIgQEAgdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6
ZGlkRmFpbChjb25zdAogICAgIG1faHR0cFN0YXR1c0NvZGUgPSA1MDA7CiB9CiAKLUZpbGVSZWFk
ZXJTeW5jOjpGaWxlUmVhZGVyU3luYygpCi0gICAgOiBtX3Jlc3VsdCgiIikKLXsKLX0KLQotY29u
c3QgU2NyaXB0U3RyaW5nJiBGaWxlUmVhZGVyU3luYzo6cmVhZEFzQmluYXJ5U3RyaW5nKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNCaW5hcnlTdHJp
bmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiog
YmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFibG9iKQotICAgICAgICByZXR1
cm4gbV9yZXN1bHQ7CisgICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIAogICAg
IHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwgUmVhZEFzQmluYXJ5U3RyaW5nLCBl
Yyk7Ci0gICAgcmV0dXJuIG1fcmVzdWx0OworICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmco
KTsKIH0KIAotY29uc3QgU2NyaXB0U3RyaW5nJiBGaWxlUmVhZGVyU3luYzo6cmVhZEFzVGV4dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9i
LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK1N0cmluZyBGaWxl
UmVhZGVyU3luYzo6cmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIWJsb2IpCi0gICAgICAgIHJldHVybiBtX3Jlc3VsdDsK
KyAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogCiAgICAgbV9lbmNvZGluZyA9
IGVuY29kaW5nOwogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwgUmVhZEFz
VGV4dCwgZWMpOwotICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICByZXR1cm4gbV9idWlsZGVyLnRv
U3RyaW5nKCk7CiB9CiAKLWNvbnN0IFNjcmlwdFN0cmluZyYgRmlsZVJlYWRlclN5bmM6OnJlYWRB
c0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
QmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgRmlsZVJlYWRlclN5bmM6OnJl
YWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFibG9iKQotICAg
ICAgICByZXR1cm4gbV9yZXN1bHQ7CisgICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmco
KTsKIAogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwgUmVhZEFzRGF0YVVS
TCwgZWMpOwotICAgIHJldHVybiBtX3Jlc3VsdDsKKyAgICByZXR1cm4gbV9idWlsZGVyLnRvU3Ry
aW5nKCk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgUmVhZFR5cGUgcmVhZFR5
cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU4LDcgKzE1NCw3IEBAIHZvaWQgRmlsZVJlYWRl
clN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW8KICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1
cmxGb3JSZWFkaW5nKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwogCi0gICAg
RmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJp
bmcpID8gJm1fcmVzdWx0IDogMCk7CisgICAgRmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVyKChy
ZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJpbmcpID8gJm1fYnVpbGRlciA6IDApOwogICAgIGxv
YWRlci5zdGFydChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCBlYyk7CiAgICAgVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsRm9yUmVhZGluZyk7CiAg
ICAgaWYgKGVjKQpAQCAtMTY5LDE3ICsxNjUsMTcgQEAgdm9pZCBGaWxlUmVhZGVyU3luYzo6cmVh
ZChTY3JpcHRFeGVjdXRpbwogICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIHNpbmNlIHdlIG5lZWQg
bm8gY29udmVyc2lvbi4KICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgUmVhZEFzVGV4dDoKLSAg
ICAgICAgY29udmVydFRvVGV4dChsb2FkZXIucmF3RGF0YSgpLmRhdGEoKSwgbG9hZGVyLnJhd0Rh
dGEoKS5zaXplKCksIG1fcmVzdWx0KTsKKyAgICAgICAgY29udmVydFRvVGV4dChsb2FkZXIucmF3
RGF0YSgpLmRhdGEoKSwgbG9hZGVyLnJhd0RhdGEoKS5zaXplKCksIG1fYnVpbGRlcik7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIFJlYWRBc0RhdGFVUkw6Ci0gICAgICAgIEZpbGVSZWFkZXI6
OmNvbnZlcnRUb0RhdGFVUkwobG9hZGVyLnJhd0RhdGEoKSwgYmxvYi0+dHlwZSgpLCBtX3Jlc3Vs
dCk7CisgICAgICAgIEZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwobG9hZGVyLnJhd0RhdGEo
KSwgYmxvYi0+dHlwZSgpLCBtX2J1aWxkZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZl
cnRUb1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFNjcmlwdFN0cmluZyYgcmVzdWx0
KQordm9pZCBGaWxlUmVhZGVyU3luYzo6Y29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRhLCBp
bnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBpZiAoIXNpemUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE5MCw4ICsxODYsOSBAQCB2b2lkIEZpbGVSZWFkZXJTeW5jOjpjb252
ZXJ0VG9UZXh0KGNvbnN0CiAgICAgLy8gcHJvdmlkZWQgZW5jb2RpbmcuICAgICAKICAgICAvLyBG
SVhNRTogY29uc2lkZXIgc3VwcG9ydGluZyBpbmNyZW1lbnRhbCBkZWNvZGluZyB0byBpbXByb3Zl
IHRoZSBwZXJmLgogICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4
dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9lbmNvZGluZy5pc0VtcHR5
KCkgPyBVVEY4RW5jb2RpbmcoKSA6IFRleHRFbmNvZGluZyhtX2VuY29kaW5nKSk7Ci0gICAgcmVz
dWx0ID0gZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIHNpemUpOwotICAgIHJlc3VsdCArPSBkZWNvZGVy
LT5mbHVzaCgpOworICAgIGJ1aWxkZXIuY2xlYXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChkZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgc2l6ZSkpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRlY29kZXItPmZs
dXNoKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlclN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlclN5bmMuaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
clN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogI2lmIEVOQUJMRShCTE9C
KQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNTIsMTMgKzUyLDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkZpbGVS
ZWFkZXJTeW5jKCkgeyB9CiAKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlYWRBc0JpbmFyeVN0
cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCisg
ICAgU3RyaW5nIHJlYWRBc0JpbmFyeVN0cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxv
YiosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgcmVhZEFzVGV4dChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICB7CiAgICAgICAgIHJldHVybiByZWFkQXNUZXh0KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGJsb2IsICIiLCBlYyk7CiAgICAgfQotICAgIGNvbnN0IFNjcmlwdFN0cmluZyYg
cmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlYWRB
c0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBj
b25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIHJlYWRB
c0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7
CiAKIHByaXZhdGU6CiAgICAgZW51bSBSZWFkVHlwZSB7CkBAIC02NywxOCArNjcsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgUmVhZEFzRGF0YVVSTAogICAgIH07CiAKLSAgICBGaWxlUmVhZGVyU3lu
YygpOwotICAgIAorICAgIEZpbGVSZWFkZXJTeW5jKCkgeyB9CisKICAgICB2b2lkIHJlYWQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBSZWFkVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgY29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgU2NyaXB0
U3RyaW5nJiByZXN1bHQpOworICAgIHZvaWQgY29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRh
LCBpbnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYpOwogCi0gICAgLy8gTGlrZSBYTUxIdHRwUmVxdWVz
dC5tX3Jlc3BvbnNlVGV4dCwgd2Uga2VlcCB0aGlzIGFzIGEgU2NyaXB0U3RyaW5nLCBub3QgYSBX
VEY6OlN0cmluZy4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGVzZSBzdHJpbmdzIGNhbiBlYXNp
bHkgZ2V0IGh1Z2UgKHRoZXkgYXJlIGZpbGxlZCBmcm9tIHRoZSBmaWxlKSBhbmQKLSAgICAvLyBi
ZWNhdXNlIEpTIGNhbiBlYXNpbHkgb2JzZXJ2ZSBtYW55IGludGVybWVkaWF0ZSBzdGF0ZXMsIHNv
IGl0J3MgdmVyeSB1c2VmdWwgdG8gYmUKLSAgICAvLyBhYmxlIHRvIHNoYXJlIHRoZSBidWZmZXIg
d2l0aCBKYXZhU2NyaXB0IHZlcnNpb25zIG9mIHRoZSB3aG9sZSBvciBwYXJ0aWFsIHN0cmluZy4K
LSAgICAvLyBJbiBjb250cmFzdCwgdGhpcyBzdHJpbmcgZG9lc24ndCBpbnRlcmFjdCBtdWNoIHdp
dGggdGhlIHJlc3Qgb2YgdGhlIGVuZ2luZSBzbyBpdCdzIG5vdCB0aGF0Ci0gICAgLy8gYmlnIGEg
Y29zdCB0aGF0IGl0IGlzbid0IGEgU3RyaW5nLgotICAgIFNjcmlwdFN0cmluZyBtX3Jlc3VsdDsK
KyAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKIAogICAgIFN0cmluZyBtX2VuY29kaW5nOwog
fTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA2OTYxNSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNl
Q29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
QEAgLTExMzIsNyArMTEzMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFpbExv
YWRpbmcKICAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX2Zyb250ZW5kLmdl
dCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5
WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJp
bmcmIHNvdXJjZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVS
TCwgdW5zaWduZWQgc2VuZExpbmVOdW1iZXIpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
c291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcikKIHsKICAgICBpZiAoIWVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2Miw3ICsxMTYxLDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZAogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlc291cmNlLT5zZXRPdmVycmlkZUNvbnRlbnQoU2NyaXB0U3RyaW5n
KHNvdXJjZVN0cmluZyksIEluc3BlY3RvclJlc291cmNlOjpTY3JpcHQpOworICAgIHJlc291cmNl
LT5zZXRPdmVycmlkZUNvbnRlbnQoc291cmNlU3RyaW5nLCBJbnNwZWN0b3JSZXNvdXJjZTo6U2Ny
aXB0KTsKIAogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2Ny
aXB0T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDYgQEAgY2xh
c3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBTY3JpcHRD
YWxsU3RhY2s7CiBjbGFzcyBTY3JpcHRQcm9maWxlOwotY2xhc3MgU2NyaXB0U3RyaW5nOwogY2xh
c3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgU3RvcmFnZTsKIGNsYXNzIFN0b3JhZ2VBcmVhOwpAQCAt
MTczLDcgKzE3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3Ro
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICB2b2lk
IGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmluaXNo
VGltZSk7CiAgICAgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIHJlc291cmNlUmV0cmlldmVkQnlYTUxI
dHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYg
c291cmNlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBzZW5kVVJMLCB1
bnNpZ25lZCBzZW5kTGluZU51bWJlcik7CisgICAgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1M
SHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2VuZFVSTCwgdW5zaWdu
ZWQgc2VuZExpbmVOdW1iZXIpOwogICAgIHZvaWQgc2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyk7CiAKICAgICB2b2lkIHNl
dFJlc291cmNlVHJhY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA2OTYxNSkKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcg
KzQxMSw3IEBAIEluc3BlY3RvclJlc291cmNlOjpUeXBlIEluc3BlY3RvclJlc291cmMKICAgICBy
ZXR1cm4gY2FjaGVkUmVzb3VyY2VUeXBlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6
OnNldE92ZXJyaWRlQ29udGVudChjb25zdCBTY3JpcHRTdHJpbmcmIGRhdGEsIFR5cGUgdHlwZSkK
K3ZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6OnNldE92ZXJyaWRlQ29udGVudChjb25zdCBTdHJpbmcm
IGRhdGEsIFR5cGUgdHlwZSkKIHsKICAgICBtX292ZXJyaWRlQ29udGVudCA9IGRhdGE7CiAgICAg
bV9vdmVycmlkZUNvbnRlbnRUeXBlID0gdHlwZTsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2UuaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNs
dWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlNjcmlw
dFN0cmluZy5oIgogI2luY2x1ZGUgIldlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QuaCIKICNpbmNs
dWRlICJXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZS5oIgogCkBAIC05OCw3ICs5Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB1cGRhdGVXZWJTb2NrZXRSZXNwb25zZShj
b25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOwogI2VuZGlmCiAKLSAgICAgICAgdm9p
ZCBzZXRPdmVycmlkZUNvbnRlbnQoY29uc3QgU2NyaXB0U3RyaW5nJiBkYXRhLCBUeXBlKTsKKyAg
ICAgICAgdm9pZCBzZXRPdmVycmlkZUNvbnRlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBUeXBlKTsK
IAogICAgICAgICBTdHJpbmcgc291cmNlU3RyaW5nKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBz
b3VyY2VCeXRlcygpIGNvbnN0OwpAQCAtMTk0LDcgKzE5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uSUQ7CiAgICAgICAgIGJvb2wgbV9jb25u
ZWN0aW9uUmV1c2VkOwogICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkVGltaW5nPiBtX2xvYWRU
aW1pbmc7Ci0gICAgICAgIFNjcmlwdFN0cmluZyBtX292ZXJyaWRlQ29udGVudDsKKyAgICAgICAg
U3RyaW5nIG1fb3ZlcnJpZGVDb250ZW50OwogICAgICAgICBUeXBlIG1fb3ZlcnJpZGVDb250ZW50
VHlwZTsKICAgICAgICAgQ2hhbmdlcyBtX2NoYW5nZXM7CiAgICAgICAgIGJvb2wgbV9pc01haW5S
ZXNvdXJjZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5NjE1KQorKysg
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw2IEBACiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKICNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlw
dFN0cmluZy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VnbWVu
dGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNiBAQCBjbGFzcyBSZXNvdXJjZUVy
cm9yOwogY2xhc3MgUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xh
c3MgU2NyaXB0U291cmNlQ29kZTsKLWNsYXNzIFNjcmlwdFN0cmluZzsKIGNsYXNzIFNjcmlwdFZh
bHVlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5NjE1KQorKysg
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7
CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7
Ci0gICAgY2xhc3MgU2NyaXB0U3RyaW5nOwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogICAg
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKICAgICBjbGFzcyBTdWJzdGl0dXRlRGF0YTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw2IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291
cmNlTG9hZGVyOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLWNsYXNzIFNjcmlwdFN0cmluZzsK
IGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIAogY2xhc3MgUmVzb3VyY2VMb2FkTm90aWZpZXIgOiBw
dWJsaWMgTm9uY29weWFibGUgewpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIu
aAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJs
ZUxvYWRlckNsaWVudC5oIgpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNjk2
MTUpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3Myw3ICsxNzMsNiBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhl
CiAgICAgLCBtX2FzQmxvYihmYWxzZSkKICNlbmRpZgogICAgICwgbV9zdGF0ZShVTlNFTlQpCi0g
ICAgLCBtX3Jlc3BvbnNlVGV4dCgiIikKICAgICAsIG1fY3JlYXRlZERvY3VtZW50KGZhbHNlKQog
ICAgICwgbV9lcnJvcihmYWxzZSkKICAgICAsIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCh0cnVlKQpA
QCAtMjI2LDcgKzIyNSw3IEBAIFhNTEh0dHBSZXF1ZXN0OjpTdGF0ZSBYTUxIdHRwUmVxdWVzdDo6
cmUKICAgICByZXR1cm4gbV9zdGF0ZTsKIH0KIAotY29uc3QgU2NyaXB0U3RyaW5nJiBYTUxIdHRw
UmVxdWVzdDo6cmVzcG9uc2VUZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorU3RyaW5nIFhN
TEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAjaWYgRU5B
QkxFKFhIUl9SRVNQT05TRV9CTE9CKQogICAgIGlmIChtX2FzQmxvYikKQEAgLTIzNCwxMCArMjMz
LDEwIEBAIGNvbnN0IFNjcmlwdFN0cmluZyYgWE1MSHR0cFJlcXVlc3Q6OnJlc3AKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKICNlbmRpZgotICAgIHJldHVybiBtX3Jlc3BvbnNlVGV4dDsK
KyAgICByZXR1cm4gbV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7
CiB9CiAKLURvY3VtZW50KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VYTUwoRXhjZXB0aW9uQ29k
ZSYgZWMpIGNvbnN0CitEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKICAgICBpZiAo
bV9hc0Jsb2IpIHsKQEAgLTI1OSw3ICsyNTgsNyBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6
OnJlc3BvbnNlWE1MKEV4CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gRG9jdW1lbnQ6OmNy
ZWF0ZSgwLCBtX3VybCk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5vcGVuKCk7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogU2V0IExhc3QtTW9kaWZpZWQuCi0gICAgICAgICAgICBtX3Jlc3Bv
bnNlWE1MLT53cml0ZShTdHJpbmcobV9yZXNwb25zZVRleHQpKTsKKyAgICAgICAgICAgIG1fcmVz
cG9uc2VYTUwtPndyaXRlKG1fcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nUHJlc2VydmVDYXBhY2l0
eSgpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmZpbmlzaFBhcnNpbmcoKTsKICAgICAg
ICAgICAgIG1fcmVzcG9uc2VYTUwtPmNsb3NlKCk7CiAKQEAgLTYyNyw3ICs2MjYsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAKICAgICBpbnRlcm5hbEFib3J0KCk7CiAKLSAgICBt
X3Jlc3BvbnNlVGV4dCA9ICIiOworICAgIG1fcmVzcG9uc2VCdWlsZGVyLmNsZWFyKCk7CiAgICAg
bV9jcmVhdGVkRG9jdW1lbnQgPSBmYWxzZTsKICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKICNpZiBF
TkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCkBAIC02NzYsNyArNjc1LDcgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6aW50ZXJuYWxBYm9ydCgpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjbGVhclJlc3Bv
bnNlKCkKIHsKICAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwotICAgIG1fcmVz
cG9uc2VUZXh0ID0gIiI7CisgICAgbV9yZXNwb25zZUJ1aWxkZXIuY2xlYXIoKTsKICAgICBtX2Ny
ZWF0ZWREb2N1bWVudCA9IGZhbHNlOwogICAgIG1fcmVzcG9uc2VYTUwgPSAwOwogI2lmIEVOQUJM
RShYSFJfUkVTUE9OU0VfQkxPQikKQEAgLTczMyw3ICs3MzIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRo
YXQgcG9pbnQuCiAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKTsKICAgICBpZiAoaGFzQ2FjaGVkRE9NT2JqZWN0
V3JhcHBlcihnbG9iYWxEYXRhLCB0aGlzKSkKLSAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZVRleHQuc2l6ZSgpICogMik7CisgICAgICAgIGds
b2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxl
bmd0aCgpICogMik7CiAjZW5kaWYKIAogICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwpA
QCAtOTQyLDcgKzk0MSw5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmco
dW4KICAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVSU19SRUNFSVZFRCk7CiAKICAgICBpZiAobV9k
ZWNvZGVyKQotICAgICAgICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmZsdXNoKCk7Cisg
ICAgICAgIG1fcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChtX2RlY29kZXItPmZsdXNoKCkpOworCisg
ICAgbV9yZXNwb25zZUJ1aWxkZXIuc2hyaW5rVG9GaXQoKTsKIAogI2lmIEVOQUJMRShYSFJfUkVT
UE9OU0VfQkxPQikKICAgICAvLyBGSVhNRTogU2V0IG1fcmVzcG9uc2VCbG9iIHRvIHNvbWV0aGlu
ZyBoZXJlIGluIHRoZSBtX2FzQmxvYiBjYXNlLgpAQCAtOTUwLDcgKzk1MSw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICBpbnNwZWN0b3ItPnJl
c291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdChpZGVudGlmaWVyLCBtX3Jlc3BvbnNlVGV4
dCwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKTsKKyAgICAgICAg
aW5zcGVjdG9yLT5yZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QoaWRlbnRpZmllciwg
bV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIG1fdXJsLCBtX2xh
c3RTZW5kVVJMLCBtX2xhc3RTZW5kTGluZU51bWJlcik7CiAjZW5kaWYKIAogICAgIGJvb2wgaGFk
TG9hZGVyID0gbV9sb2FkZXI7CkBAIC0xMDE5LDcgKzEwMjAsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zCiAgICAgaWYgKGxlbiA9PSAtMSkKICAgICAgICAgbGVu
ID0gc3RybGVuKGRhdGEpOwogCi0gICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5kZWNv
ZGUoZGF0YSwgbGVuKTsKKyAgICBtX3Jlc3BvbnNlQnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5k
ZWNvZGUoZGF0YSwgbGVuKSk7CiAKICAgICBpZiAoIW1fZXJyb3IpIHsKICAgICAgICAgbG9uZyBs
b25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
SW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRo
cmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg5LDggKzg5LDggQEAgcHVibGljOgog
ICAgIHZvaWQgb3ZlcnJpZGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG92ZXJyaWRlKTsKICAgICBT
dHJpbmcgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBT
dHJpbmcgZ2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJikgY29uc3Q7Ci0gICAgY29uc3QgU2NyaXB0U3RyaW5nJiByZXNwb25zZVRleHQoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIERvY3VtZW50KiByZXNwb25zZVhNTChFeGNlcHRpb25D
b2RlJikgY29uc3Q7CisgICAgU3RyaW5nIHJlc3BvbnNlVGV4dChFeGNlcHRpb25Db2RlJik7Cisg
ICAgRG9jdW1lbnQqIHJlc3BvbnNlWE1MKEV4Y2VwdGlvbkNvZGUmKTsKICNpZiBFTkFCTEUoWEhS
X1JFU1BPTlNFX0JMT0IpCiAgICAgQmxvYiogcmVzcG9uc2VCbG9iKEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKICNlbmRpZgpAQCAtMTc2LDEzICsxNzYsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRy
PFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKIAotICAgIC8vIFVubGlrZSBtb3N0IHN0
cmluZ3MgaW4gdGhlIERPTSwgd2Uga2VlcCB0aGlzIGFzIGEgU2NyaXB0U3RyaW5nLCBub3QgYSBX
VEY6OlN0cmluZy4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGVzZSBzdHJpbmdzIGNhbiBlYXNp
bHkgZ2V0IGh1Z2UgKHRoZXkgYXJlIGZpbGxlZCBmcm9tIHRoZSBuZXR3b3JrIHdpdGgKLSAgICAv
LyBubyBwYXJzaW5nKSBhbmQgYmVjYXVzZSBKUyBjYW4gZWFzaWx5IG9ic2VydmUgbWFueSBpbnRl
cm1lZGlhdGUgc3RhdGVzLCBzbyBpdCdzIHZlcnkgdXNlZnVsCi0gICAgLy8gdG8gYmUgYWJsZSB0
byBzaGFyZSB0aGUgYnVmZmVyIHdpdGggSmF2YVNjcmlwdCB2ZXJzaW9ucyBvZiB0aGUgd2hvbGUg
b3IgcGFydGlhbCBzdHJpbmcuCi0gICAgLy8gSW4gY29udHJhc3QsIHRoaXMgc3RyaW5nIGRvZXNu
J3QgaW50ZXJhY3QgbXVjaCB3aXRoIHRoZSByZXN0IG9mIHRoZSBlbmdpbmUgc28gaXQncyBub3Qg
dGhhdAotICAgIC8vIGJpZyBhIGNvc3QgdGhhdCBpdCBpc24ndCBhIFN0cmluZy4KLSAgICBTY3Jp
cHRTdHJpbmcgbV9yZXNwb25zZVRleHQ7CisgICAgU3RyaW5nQnVpbGRlciBtX3Jlc3BvbnNlQnVp
bGRlcjsKICAgICBtdXRhYmxlIGJvb2wgbV9jcmVhdGVkRG9jdW1lbnQ7CiAgICAgbXV0YWJsZSBS
ZWZQdHI8RG9jdW1lbnQ+IG1fcmVzcG9uc2VYTUw7CiAKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTY3NSkKKysrIFdl
YktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAt
MTMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzk4NworICAgICAgICBTd2l0Y2ggWE1MSHR0cFJlcXVl
c3QsIEZpbGVSZWFkZXIsIGFuZCBGaWxlUmVhZGVyU3luYyB0byB1c2UgYSBTdHJpbmdidWlsZGVy
CisgICAgICAgIHRvIGNvbnN0cnVjdCB0aGVpciBpbnRlcm5hbCByZXN1bHQgc3RyaW5nLiAgUmVt
b3ZlIFNjcmlwdFN0cmluZyAodGhpcyBpcyBub3cKKyAgICAgICAgcmVkdW5kYW50KS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2Fk
UmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisKIDIwMTAtMTAtMTMgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2OTYxNSkKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZExvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRTdHJpbmcmKQordm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGlu
ZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERp
ZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBpbnQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkUmVz
b3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6U2NyaXB0U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJl
c291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdU
Rjo6U3RyaW5nJik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25s
b2FkRXZlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCk7CkluZGV4OiBXZWJLaXQvZWZsL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gNjk2NzUpCisrKyBX
ZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEw
LTEwLTEzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM5ODcKKyAgICAgICAgU3dpdGNoIFhNTEh0dHBS
ZXF1ZXN0LCBGaWxlUmVhZGVyLCBhbmQgRmlsZVJlYWRlclN5bmMgdG8gdXNlIGEgU3RyaW5nYnVp
bGRlcgorICAgICAgICB0byBjb25zdHJ1Y3QgdGhlaXIgaW50ZXJuYWwgcmVzdWx0IHN0cmluZy4g
IFJlbW92ZSBTY3JpcHRTdHJpbmcgKHRoaXMgaXMgbm93CisgICAgICAgIHJlZHVuZGFudCkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEVmbC5oOgorCiAyMDEwLTEwLTEzICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1A
c2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uCkluZGV4OiBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmNwcAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU5LDcg
Kzc1OSw3IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkTG8KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlk
TG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBjb25zdCBTY3JpcHRT
dHJpbmcmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmgJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViS2l0L2Vm
bC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw3ICs5MSw3IEBAIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50RWZsIDogcHVibGljIEZyYW0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllcik7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9h
ZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBsZW5ndGgpOwotICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTY3JpcHRTdHJpbmcmIHNvdXJjZVN0cmlu
Zyk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVx
dWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc291
cmNlU3RyaW5nKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2
ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTG9hZCgpOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5Njc1KQorKysgV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMC0x
MyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTg3CisgICAgICAgIFN3aXRjaCBYTUxIdHRwUmVxdWVz
dCwgRmlsZVJlYWRlciwgYW5kIEZpbGVSZWFkZXJTeW5jIHRvIHVzZSBhIFN0cmluZ2J1aWxkZXIK
KyAgICAgICAgdG8gY29uc3RydWN0IHRoZWlyIGludGVybmFsIHJlc3VsdCBzdHJpbmcuICBSZW1v
dmUgU2NyaXB0U3RyaW5nICh0aGlzIGlzIG5vdworICAgICAgICByZWR1bmRhbnQpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisKIDIwMTAtMTAt
MTIgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFt
cGVkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShyZXZpc2lvbiA2OTYxNSkKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTExMSw3ICsxMTEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2Ny
aXB0Q29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRTdHJpbmcuaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpD
RXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgpJbmRleDogV2ViS2l0L3F0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTY3
NSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMC0xMC0xMyAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzOTg3CisgICAgICAgIFN3aXRjaCBY
TUxIdHRwUmVxdWVzdCwgRmlsZVJlYWRlciwgYW5kIEZpbGVSZWFkZXJTeW5jIHRvIHVzZSBhIFN0
cmluZ2J1aWxkZXIKKyAgICAgICAgdG8gY29uc3RydWN0IHRoZWlyIGludGVybmFsIHJlc3VsdCBz
dHJpbmcuICBSZW1vdmUgU2NyaXB0U3RyaW5nICh0aGlzIGlzIG5vdworICAgICAgICByZWR1bmRh
bnQpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6
CisKIDIwMTAtMTAtMTMgIERpbnUgSmFjb2IgIDxkaW51LmphY29iQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gNjk2MTUpCisr
KyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVy
bmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1l
bnRzLmgiCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gNjk2NzUpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTEzICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDM5ODcKKyAgICAgICAgU3dpdGNoIFhNTEh0dHBSZXF1ZXN0LCBGaWxlUmVhZGVyLCBh
bmQgRmlsZVJlYWRlclN5bmMgdG8gdXNlIGEgU3RyaW5nYnVpbGRlcgorICAgICAgICB0byBjb25z
dHJ1Y3QgdGhlaXIgaW50ZXJuYWwgcmVzdWx0IHN0cmluZy4gIFJlbW92ZSBTY3JpcHRTdHJpbmcg
KHRoaXMgaXMgbm93CisgICAgICAgIHJlZHVuZGFudCkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisKIDIwMTAtMTAtMTIgIEFkYW0gUm9iZW4g
IDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIFRlc3RXZWJLaXRBUEkgb24gV2lu
ZG93cwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDY5NjE1KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclBhcnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9TY3JpcHRTdHJpbmcuaD4KICNwcmFnbWEgd2FybmluZyhwb3ApCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTY3NSkKKysrIFdlYktpdC93
eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMC0xMyAg
R2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzOTg3CisgICAgICAgIFN3aXRjaCBYTUxIdHRwUmVxdWVzdCwg
RmlsZVJlYWRlciwgYW5kIEZpbGVSZWFkZXJTeW5jIHRvIHVzZSBhIFN0cmluZ2J1aWxkZXIKKyAg
ICAgICAgdG8gY29uc3RydWN0IHRoZWlyIGludGVybmFsIHJlc3VsdCBzdHJpbmcuICBSZW1vdmUg
U2NyaXB0U3RyaW5nICh0aGlzIGlzIG5vdworICAgICAgICByZWR1bmRhbnQpLgorCisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcDoKKwogMjAxMC0wOS0yOCAg
SmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEbWl0cnkgVGl0b3YuCkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFd4LmNwcAkocmV2aXNpb24gNjk2MTUpCisrKyBXZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NyArNDksNiBAQAogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNj
cmlwdFN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCg==
</data>
<flag name="review"
          id="60501"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>