<?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>28134</bug_id>
          
          <creation_ts>2009-08-09 14:58:36 -0700</creation_ts>
          <short_desc>Move Access Control out of XMLHttpRequest</short_desc>
          <delta_ts>2009-08-14 12:25:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>24853</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Aaron Boodman">aa</reporter>
          <assigned_to name="Aaron Boodman">aa</assigned_to>
          <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138561</commentid>
    <comment_count>0</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-09 14:58:36 -0700</bug_when>
    <thetext>This is a good thing to do anyway, just because Access Control is a separate spec that could be used for other things.

But there are also two concrete needs motivating this:

* The CrossOriginAccessControl cache is having to use locks presently, because it is used on multiple threads because of workers. It would be nice to remove those.
* The Chromium project would like to add a callback to allow Chromium to override the default handling of cross-origin XHR, but this cannot be done until we move AC out onto the main thread (see bug 24853)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138563</commentid>
    <comment_count>1</comment_count>
      <attachid>34432</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-09 15:24:17 -0700</bug_when>
    <thetext>Created attachment 34432
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138589</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 21:26:36 -0700</bug_when>
    <thetext>A rather serious undertaking for your 8th WebKit patch. ;)  I&apos;ll take a more serious look tomorrow.  I was slightly surprised this went into DocumentThreadableLoader instead of a new class (given your goals of code re-use), but that will probably make more sense to me when I take a longer look tomorrow.  CC&apos;d Sam who has also worked on XHR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138606</commentid>
    <comment_count>3</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-09 22:38:24 -0700</bug_when>
    <thetext>Yeah, I wouldn&apos;t have chosen to take on something this large so early in my WebKit career, but I needed it done.

FWIW, Dave Levin offered to do this review for me because he also wants to see this done (for workers), and he also suggested splitting out the access control stuff, which I am happy to do.

But I&apos;m happy to have additional comments. Please keep in mind I&apos;m still wrapping my head around WebKit conventions, so don&apos;t assume there is any rhyme or reason to my decisions :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138607</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-09 22:53:35 -0700</bug_when>
    <thetext>I&apos;m pretty familiar with this code so I will look tomorrow unless someone else familiar with the area really wants it.  I was just taking the weekend off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138609</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-09 23:02:09 -0700</bug_when>
    <thetext>Skimming over the patch, I was surprised by:

+        static void loadResourceSynchronously(ScriptExecutionContext*, const ResourceRequest&amp;, ThreadableLoaderClient&amp;, ThreadableLoaderOptions);

Why is the ThreadableLoaderOptions struct copied, and not passed by reference?

+        // TODO(aa): Is this the right way to notify errors?

Should be &quot;FIXME: ...&quot;

+    // TODO(aa): This doesn&apos;t look to me like it will actually follow redirects. Investigate.

Ditto. Yes, redirects don&apos;t work yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138709</commentid>
    <comment_count>6</comment_count>
      <attachid>34432</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-10 10:23:57 -0700</bug_when>
    <thetext>Comment on attachment 34432
Proposed patch

+void DocumentThreadableLoader::loadResourceSynchronously(Document* document, const ResourceRequest&amp; request, ThreadableLoaderClient&amp; client, ThreadableLoaderOptions options)
 {
-    &lt;...&gt;
+    RefPtr&lt;DocumentThreadableLoader&gt; loader = adoptRef(new DocumentThreadableLoader(document, &amp;client, false, request, options));
 }

It&apos;s great to re-use async logic here. Some comments though:
- it&apos;s worth adding a comment and maybe an assertion (hasOneRef()) to explain that the loader will actually be deleted once this function returns;
- in create(), we have ASSERT(document); please add it here, as well;
- the new sync/async argument should be an enum, not a boolean.

One more question about sharing code - have you checked how auth dialogs behave with sync loads?

+    if (!m_options.forceCrossOriginPreflight &amp;&amp; isSimpleCrossOriginAccessRequest(request.httpMethod(), request.httpHeaderFields())) {
+        makeSimpleCrossOriginAccessRequest(request);
+    } else {

No braces around single-line blocks.

+        if (CrossOriginPreflightResultCache::shared().canSkipPreflight(document-&gt;securityOrigin()-&gt;toString(), request.url(), m_options.allowCredentials, request.httpMethod(), request.httpHeaderFields())) {
+            preflightSuccess();
+        } else

Ditto.

+        loadRequest(request, skipCanLoadCheck, m_options.sendLoadCallbacks, m_options.sniffContent);

It&apos;s highly confusing that loadRequest() has two sets of these parameters, one in m_options, and another in explicit arguments. Can anything be done to improve this?

+        preflightRequest.addHTTPHeaderFields(requestHeaderFields);

As an aside, Mozilla debates that this is based on an incorrect reading of the spec, and actual request headers shouldn&apos;t be sent with OPTIONS request. Certainly not something to change right now, of course.

+    // FIXME: None of the option parameters are used in the synchronous path. Currently only XHR uses the synchronous path, and it doesn&apos;t need these options.

I think this means &quot;none are supported&quot;. Could you add assertions to enforce this?

+    // FIXME: This is different than what documents do. Why?
+    if (request.url().isLocalFile())
+      options.sniffContent = true;

I&apos;ll defer to Dave to comment on this.

-        
+

I sense evil from check-webkit-style. Not too bad for this particular patch, but fixing style in functions that are not otherwise modified is not helpful.

In general, I really like this patch. Eric&apos;s comment about moving the code into a separate class makes sense to me, but that&apos;s probably too difficult to do in one step. Also, it&apos;s not much practical difference, as ThreadableLoader is used in all the same places we need (or potentially need) access control in.

By the way, why didn&apos;t you use bug 24462 for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138731</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-10 11:09:41 -0700</bug_when>
    <thetext>&gt; I sense evil from check-webkit-style.
In this case, that is misplaced.  By default, it only reports errors for lines that were changed.  

For example, when I applied Aaron&apos;s patch and ran that tool, it only listed this:

    WebCore/loader/ThreadableLoader.cpp:43:  Line ends in whitespace.  Consider deleting these extra spaces.  [whitespace/end_of_line] [4]

so if he were running the tool, it shouldn&apos;t be there.

Also when I ran it on WebCore/loader/ThreadableLoader.cpp alone, it listed the above error plus:
    WebCore/loader/ThreadableLoader.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138753</commentid>
    <comment_count>8</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-10 11:46:44 -0700</bug_when>
    <thetext>I think I ran the tool incorrect. I did:

check-webkit-style &lt;path-to-file&gt;

I didn&apos;t realize there was a way to run it and have in only complain about changed files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138764</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-10 12:06:51 -0700</bug_when>
    <thetext>Re: check-webkit-style
Apparently, it was its evil ways that caused the spacing changes. :)


 +    // FIXME: This is different than what documents do. Why? 
 +    if (request.url().isLocalFile())
 +      options.sniffContent = true;

Good catch. In short, this should be removed now.

Details:
This was added to mirror the logic done in the async XHR case (which was initially added in http://trac.webkit.org/changeset/29370 due to &quot;due to CFNetwork not providing a MIME type for local files&quot;).

However, the sniff content was recently removed from xhr async code path in http://trac.webkit.org/changeset/43511 and thus should be removed from here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138871</commentid>
    <comment_count>10</comment_count>
      <attachid>34531</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-10 17:50:12 -0700</bug_when>
    <thetext>Created attachment 34531
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138873</commentid>
    <comment_count>11</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-10 18:19:57 -0700</bug_when>
    <thetext>Ready for another look. Comments inline...

Also, I am getting a test failure on the test cross-origin-no-authorization.html. This failure happens even without my changes, but I have verified that it doesn&apos;t happen on the bots.

It looks to me like it is failing because the code in ResourceHandleMac.mm at line ~389 is passing the right value for the flag to make it not send credentials, but the system API is not obeying.

I am wondering if it could be an OS version thing. I am currently running 10.5. 

I am going to try and update my OS but I was wondering if in the meantime anybody could verify whether this system API might have changed in the 10.6/10.7 timeframe.

(In reply to comment #5)
&gt; Skimming over the patch, I was surprised by:
&gt; 
&gt; +        static void loadResourceSynchronously(ScriptExecutionContext*, const
&gt; ResourceRequest&amp;, ThreadableLoaderClient&amp;, ThreadableLoaderOptions);
&gt; 
&gt; Why is the ThreadableLoaderOptions struct copied, and not passed by reference?

No reason. Fixed.

&gt; 
&gt; +        // TODO(aa): Is this the right way to notify errors?
&gt; 
&gt; Should be &quot;FIXME: ...&quot;

Fixed.

&gt; +    // TODO(aa): This doesn&apos;t look to me like it will actually follow
&gt; redirects. Investigate.
&gt; 
&gt; Ditto. Yes, redirects don&apos;t work yet.

Removed note.(In reply to comment #7)


(In reply to comment #6)
&gt; (From update of attachment 34432 [details])
&gt; +void DocumentThreadableLoader::loadResourceSynchronously(Document* document,
&gt; const ResourceRequest&amp; request, ThreadableLoaderClient&amp; client,
&gt; ThreadableLoaderOptions options)
&gt;  {
&gt; -    &lt;...&gt;
&gt; +    RefPtr&lt;DocumentThreadableLoader&gt; loader = adoptRef(new
&gt; DocumentThreadableLoader(document, &amp;client, false, request, options));
&gt;  }
&gt; 
&gt; It&apos;s great to re-use async logic here. Some comments though:
&gt; - it&apos;s worth adding a comment and maybe an assertion (hasOneRef()) to explain
&gt; that the loader will actually be deleted once this function returns;

Assertion and comment added.

&gt; - in create(), we have ASSERT(document); please add it here, as well;

We also assert in the constructor, so I took out the one in ::create().

&gt; - the new sync/async argument should be an enum, not a boolean.

Enum added.

&gt; One more question about sharing code - have you checked how auth dialogs behave
&gt; with sync loads?

I&apos;m struggling to even find any test code that uses auth dialogs. Do you know of a good way to test this?

&gt; +    if (!m_options.forceCrossOriginPreflight &amp;&amp;
&gt; isSimpleCrossOriginAccessRequest(request.httpMethod(),
&gt; request.httpHeaderFields())) {
&gt; +        makeSimpleCrossOriginAccessRequest(request);
&gt; +    } else {
&gt; 
&gt; No braces around single-line blocks.
&gt; 
&gt; +        if
&gt; (CrossOriginPreflightResultCache::shared().canSkipPreflight(document-&gt;securityOrigin()-&gt;toString(),
&gt; request.url(), m_options.allowCredentials, request.httpMethod(),
&gt; request.httpHeaderFields())) {
&gt; +            preflightSuccess();
&gt; +        } else
&gt; 
&gt; Ditto.
&gt; 
&gt; +        loadRequest(request, skipCanLoadCheck, m_options.sendLoadCallbacks,
&gt; m_options.sniffContent);
&gt; 
&gt; It&apos;s highly confusing that loadRequest() has two sets of these parameters, one
&gt; in m_options, and another in explicit arguments. Can anything be done to
&gt; improve this?
&gt; 
&gt; +        preflightRequest.addHTTPHeaderFields(requestHeaderFields);
&gt; 
&gt; As an aside, Mozilla debates that this is based on an incorrect reading of the
&gt; spec, and actual request headers shouldn&apos;t be sent with OPTIONS request.
&gt; Certainly not something to change right now, of course.
&gt; 
&gt; +    // FIXME: None of the option parameters are used in the synchronous path.
&gt; Currently only XHR uses the synchronous path, and it doesn&apos;t need these
&gt; options.
&gt; 
&gt; I think this means &quot;none are supported&quot;. Could you add assertions to enforce
&gt; this?

Done.

&gt; I sense evil from check-webkit-style. Not too bad for this particular patch,
&gt; but fixing style in functions that are not otherwise modified is not helpful.

Yeah, I apparently used check-webkit-style incorrectly. Do you mind if I leave the style fixes in?

&gt; In general, I really like this patch. Eric&apos;s comment about moving the code into
&gt; a separate class makes sense to me, but that&apos;s probably too difficult to do in
&gt; one step. Also, it&apos;s not much practical difference, as ThreadableLoader is used
&gt; in all the same places we need (or potentially need) access control in.

I would prefer to leave it in DocumentThreadableLoader for now if you aren&apos;t strongly against it.

&gt; By the way, why didn&apos;t you use bug 24462 for this patch?

I noticed that bug was already submitted and wasn&apos;t sure if that should mean I should create a new one or not.


(In reply to comment #9)
&gt; Re: check-webkit-style
&gt; Apparently, it was its evil ways that caused the spacing changes. :)
&gt; 
&gt; 
&gt;  +    // FIXME: This is different than what documents do. Why? 
&gt;  +    if (request.url().isLocalFile())
&gt;  +      options.sniffContent = true;
&gt; 
&gt; Good catch. In short, this should be removed now.

Ok, I removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138891</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-10 20:25:40 -0700</bug_when>
    <thetext>&gt; I am wondering if it could be an OS version thing. I am currently running 10.5. 

IIRC you need Mac OS X 10.5.7. This test is disabled on Tiger, so it&apos;s only on 10.5.x with x &lt; 7 that the test is expected to fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138892</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-10 20:30:01 -0700</bug_when>
    <thetext>(In reply to comment #11)

&gt; I&apos;m struggling to even find any test code that uses auth dialogs. Do you know
&gt; of a good way to test this?

No, I don&apos;t think there is one currently - except for manual testing.

&gt; Yeah, I apparently used check-webkit-style incorrectly. Do you mind if I leave
&gt; the style fixes in?

That&apos;s fine with me.

&gt; &gt; In general, I really like this patch. Eric&apos;s comment about moving the code into
&gt; &gt; a separate class makes sense to me, but that&apos;s probably too difficult to do in
&gt; &gt; one step. Also, it&apos;s not much practical difference, as ThreadableLoader is used
&gt; &gt; in all the same places we need (or potentially need) access control in.
&gt; 
&gt; I would prefer to leave it in DocumentThreadableLoader for now if you aren&apos;t
&gt; strongly against it.

Sure.

&gt; &gt; By the way, why didn&apos;t you use bug 24462 for this patch?
&gt; 
&gt; I noticed that bug was already submitted and wasn&apos;t sure if that should mean I
&gt; should create a new one or not.

I left it open after landing step 1 to continue work there one day. Not a big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138900</commentid>
    <comment_count>14</comment_count>
      <attachid>34531</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-10 21:15:40 -0700</bug_when>
    <thetext>Comment on attachment 34531
New patch

&gt; +      ThreadableLoaderOptions() : sendLoadCallbacks(false), sniffContent(false), crossOriginAccessControl(false), allowCredentials(false), forceCrossOriginPreflight(false), allowCrossOriginRedirect(false) {}

We usually put a space between braces in such cases.

&gt; +    // Note: the loader will be deleted as soon as this function exits.

Most comments are also notes :)

r=me, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138915</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-11 00:09:28 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 34531 [details])
&gt; &gt; +      ThreadableLoaderOptions() : sendLoadCallbacks(false), sniffContent(false), crossOriginAccessControl(false), allowCredentials(false), forceCrossOriginPreflight(false), allowCrossOriginRedirect(false) {}
&gt; 
&gt; We usually put a space between braces in such cases.

I didn&apos;t realize we had a style about such.  Seems we might need to update the guide. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139180</commentid>
    <comment_count>16</comment_count>
      <attachid>34620</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-11 17:46:30 -0700</bug_when>
    <thetext>Created attachment 34620
New patch

Fix whitespace and comment nits.

ap: If you think this is good can you flip the commit-queue setting so that eric&apos;s script will pick it up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139181</commentid>
    <comment_count>17</comment_count>
      <attachid>34621</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-11 17:46:48 -0700</bug_when>
    <thetext>Created attachment 34621
New patch

Fixed whitespace/comment nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139212</commentid>
    <comment_count>18</comment_count>
      <attachid>34621</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-11 20:08:10 -0700</bug_when>
    <thetext>Comment on attachment 34621
New patch

(In reply to comment #16)
&gt; ap: If you think this is good can you flip the commit-queue setting so that
&gt; eric&apos;s script will pick it up?

As they say, flipping the bit is the moral equivalent of committing, and I can&apos;t watch the buildbots at the moment, sorry.

By the way, comparing the patch that I reviewed to the latest one shows lots of differences due to order of files. Our svn-create-patch script is supposed to sort changed files to simplify comparing patch revisions - did you use some other tool to make the patches, or did this feature break?

Looks like this latest &quot;New patch&quot; is identical to previous one and is here by accident, obsoleting it to avoid confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139220</commentid>
    <comment_count>19</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-11 21:00:22 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 34621 [details])
&gt; (In reply to comment #16)
&gt; &gt; ap: If you think this is good can you flip the commit-queue setting so that
&gt; &gt; eric&apos;s script will pick it up?
&gt; 
&gt; As they say, flipping the bit is the moral equivalent of committing, and I
&gt; can&apos;t watch the buildbots at the moment, sorry.

Ok, I&apos;ll hit someone else up tomorrow.

&gt; By the way, comparing the patch that I reviewed to the latest one shows lots of
&gt; differences due to order of files. Our svn-create-patch script is supposed to
&gt; sort changed files to simplify comparing patch revisions - did you use some
&gt; other tool to make the patches, or did this feature break?

Dunno. I just ran it again with svn-create-patch and it created an identical patch. Maybe I used svn diff the first time, or maybe the script is not working correctly.

&gt; Looks like this latest &quot;New patch&quot; is identical to previous one and is here by
&gt; accident, obsoleting it to avoid confusion.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139454</commentid>
    <comment_count>20</comment_count>
      <attachid>34620</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 11:39:33 -0700</bug_when>
    <thetext>Comment on attachment 34620
New patch

Forwarding ap&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139566</commentid>
    <comment_count>21</comment_count>
      <attachid>34620</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 14:57:47 -0700</bug_when>
    <thetext>Comment on attachment 34620
New patch

Testing 11049 test cases.
http/tests/workers/worker-importScripts.html -&gt; failed
http/tests/xmlhttprequest/cross-origin-no-authorization.html -&gt; failed

commit queue script hit those errors and I stopped it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139569</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 14:58:20 -0700</bug_when>
    <thetext>I did not investigate the failures enough to know if this patch should be r-&apos;d too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139585</commentid>
    <comment_count>23</comment_count>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-12 15:12:57 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 34620 [details])
&gt; Testing 11049 test cases.
&gt; http/tests/workers/worker-importScripts.html -&gt; failed
&gt; http/tests/xmlhttprequest/cross-origin-no-authorization.html -&gt; failed
&gt; 
&gt; commit queue script hit those errors and I stopped it.

Thanks, I will investigate. I hit the cross-origin-no-authorization one, but I thought it was due to an incompatibility on the OS I&apos;m using.

I did not see the importScripts one. I will look into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139608</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 15:36:24 -0700</bug_when>
    <thetext>It&apos;s also always possible there was a regression in the tree at the exact moment your patch went through the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140100</commentid>
    <comment_count>25</comment_count>
      <attachid>34797</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-13 16:51:48 -0700</bug_when>
    <thetext>Created attachment 34797
Newer patch

Fixed failing layout test. Problem was that I refactored out the calls to setAllowHTTPCookies(false) when XMLHttpRequest.withCredentials was false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140102</commentid>
    <comment_count>26</comment_count>
      <attachid>34797</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 17:08:04 -0700</bug_when>
    <thetext>Comment on attachment 34797
Newer patch

Rejecting patch 34797 from commit-queue.  This patch will require manual commit.

[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;] failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140103</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-13 17:08:30 -0700</bug_when>
    <thetext>http/tests/workers/worker-importScripts.html -&gt; failed
is what caused this failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140129</commentid>
    <comment_count>28</comment_count>
      <attachid>34803</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-08-13 20:10:40 -0700</bug_when>
    <thetext>Created attachment 34803
One more time patch

Argh. I was accidentally not running all the tests and missed one failure. It turned out to be rather important, WorkerScriptLoader delegates to DocumentThreadableLoader, and he wants all cross-origin requests to succeed, without any access control being needed.

So I introduced a new enum, CrossOriginRequestPolicy, to go with CrossOriginRedirectPolicy, which callers to DocumentThreadableLoader can use to indicate how they want cross-origin requests to be handled: deny, allow, or use access control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140271</commentid>
    <comment_count>29</comment_count>
      <attachid>34803</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-14 10:59:23 -0700</bug_when>
    <thetext>Comment on attachment 34803
One more time patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140280</commentid>
    <comment_count>30</comment_count>
      <attachid>34803</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 11:22:27 -0700</bug_when>
    <thetext>Comment on attachment 34803
One more time patch

Rejecting patch 34803 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140287</commentid>
    <comment_count>31</comment_count>
      <attachid>34803</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 11:36:12 -0700</bug_when>
    <thetext>Comment on attachment 34803
One more time patch

There was a commit just as commit-queue was about to land.  It doesnt&apos; know how to recover from that.  I would add cq+ back, except the tree is red atm, so I&apos;ll add it back in a bit (or any commiter can once the tree turns green again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140295</commentid>
    <comment_count>32</comment_count>
      <attachid>34803</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 12:03:58 -0700</bug_when>
    <thetext>Comment on attachment 34803
One more time patch

I expect the bots to roll green now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140300</commentid>
    <comment_count>33</comment_count>
      <attachid>34803</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 12:25:45 -0700</bug_when>
    <thetext>Comment on attachment 34803
One more time patch

Clearing flags on attachment: 34803

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/loader/DocumentThreadableLoader.cpp
	M	WebCore/loader/DocumentThreadableLoader.h
	M	WebCore/loader/ThreadableLoader.cpp
	M	WebCore/loader/ThreadableLoader.h
	M	WebCore/loader/WorkerThreadableLoader.cpp
	M	WebCore/loader/WorkerThreadableLoader.h
	M	WebCore/platform/CrossThreadCopier.h
	M	WebCore/workers/WorkerScriptLoader.cpp
	M	WebCore/xml/XMLHttpRequest.cpp
	M	WebCore/xml/XMLHttpRequest.h
Committed r47291
	M	WebCore/ChangeLog
	M	WebCore/platform/CrossThreadCopier.h
	M	WebCore/workers/WorkerScriptLoader.cpp
	M	WebCore/xml/XMLHttpRequest.cpp
	M	WebCore/xml/XMLHttpRequest.h
	M	WebCore/loader/WorkerThreadableLoader.cpp
	M	WebCore/loader/ThreadableLoader.cpp
	M	WebCore/loader/WorkerThreadableLoader.h
	M	WebCore/loader/DocumentThreadableLoader.h
	M	WebCore/loader/ThreadableLoader.h
	M	WebCore/loader/DocumentThreadableLoader.cpp
r47291 = cfd042ebd4b8ed42b7a62f963d62dd1c1ff3b6ee (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/47291</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140301</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 12:25:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34432</attachid>
            <date>2009-08-09 15:24:17 -0700</date>
            <delta_ts>2009-08-11 17:46:30 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug28134.patch</filename>
            <type>text/plain</type>
            <size>56842</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njk2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMDkgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQlVH
IDI4MTM0OiBNb3ZlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgQWNjZXNzIENvbnRyb2wgZnJvbSBY
TUxIdHRwUmVxdWVzdCB0byBUaHJlYWRhYmxlRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzNAorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhZGRlZCBzaW5jZSBBY2Nlc3MgQ29udHJvbCB3YXMgYWxyZWFkeSB3ZWxsIHRlc3Rl
ZCBhbmQgdGhpcyBpcyBhIHB1cmUgcmVmYWN0b3IuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogTW92ZSBhIGxvdCBvZiB0aGUgYWNjZXNzIGNvbnRyb2wg
Y29kZSBmcm9tIFhIUiBpbiwgcHJlc2VydmluZyBpdHMKKyAgICAgICAgYmFzaWMgc3RyYXRlZ3ku
IEFsc28sIG1vZGlmeSB0aGUgc3luY2hyb25vdXMgcGF0aCB0byBub3QgYmUgYSBzcGVjaWFsIGNh
c2UsIGJ1dCByZXVzZSBtb3JlIG9mIHRoZSBhc3luYworICAgICAgICBwYXRoLgorCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBHbyB0aHJvdWdoIHRoZSBhc3luYyBwYXRoIGFuZCBwYXNzIGFkZGl0aW9uYWwgZmxh
Z3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6
IEdyb3VwIGVudW0gcGFyYW1zIGludG8gYW4gb3B0aW9ucyBzdHJ1Y3QuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KTogQnJvdWdodCBtb3N0bHkgZnJvbSBYSFIu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6IEhhbmRsZSBwcmVm
bGlnaHQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6IFByZWZsaWdodCBoYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6IENv
bW1vbiByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhc3luYy9zeW5jLgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDogR3JvdXAgZW51bSBwYXJhbXMgaW50
byBhbiBvcHRpb25zIHN0cnVjdC4KKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6VGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6RGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBBbGxv
dyBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB0byBiZSBjb3BpZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3JvdXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3Jv
dXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hy
b25vdXNseSk6IE1vcmUgZW51bS0+c3RydWN0IGdyb3VwaW5nLgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6IFJlbW92ZSBhbGwgdGhlIGFjY2VzcyBjb250cm9sIGNvZGUgYW5kIHNv
bWUgc3VwcG9ydGluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpY
TUxIdHRwUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZVJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuaDogRGl0dG8uCisKIDIwMDktMDgtMDkgIE5pa29sYXMgWmltbWVybWFubiAgPG5p
a29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
R2VvcmdlIFN0YWlrb3MuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ2OTY0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIK
KyNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCkBAIC00Myw2MSArNDQsMTA1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3Jl
ZGVudGlhbHMpCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucyBvcHRpb25zKQogewotICAgIGJvb2wgc2FtZU9yaWdpblJlcXVlc3QgPSBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKLQotICAgIFZlY3Rv
cjxjaGFyPiBkYXRhOwotICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKLSAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAoZG9jdW1lbnQtPmZyYW1l
KCkpCi0gICAgICAgIGlkZW50aWZpZXIgPSBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7Ci0KLSAgICAvLyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJl
c291cmNlcywgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTYyMjk4Pi4KLSAgICAvLyBBbHNvLCBpZiB3
ZSBoYXZlIGFuIEhUVFAgcmVzcG9uc2UsIHRoZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBp
biBmYWN0LgotICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgIXJlcXVlc3QudXJsKCkuaXNMb2Nh
bEZpbGUoKSAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIDw9IDApIHsKLSAgICAgICAgY2xp
ZW50LmRpZEZhaWwoZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IFRoaXMgY2hlY2sgYWxvbmcgd2l0aCB0aGUgb25lIGluIHdpbGxTZW5kUmVxdWVzdCBpcyBz
cGVjaWZpYyB0byB4aHIgYW5kCi0gICAgLy8gc2hvdWxkIGJlIG1hZGUgbW9yZSBnZW5lcmljLgot
ICAgIGlmIChzYW1lT3JpZ2luUmVxdWVzdCAmJiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkpKSB7Ci0gICAgICAgIGNsaWVudC5kaWRGYWlsUmVk
aXJlY3RDaGVjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2xpZW50LmRpZFJl
Y2VpdmVSZXNwb25zZShyZXNwb25zZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7Ci0gICAgaW50IGxlbiA9IHN0YXRpY19j
YXN0PGludD4oZGF0YS5zaXplKCkpOwotICAgIGNsaWVudC5kaWRSZWNlaXZlRGF0YShieXRlcywg
bGVuKTsKLQotICAgIGNsaWVudC5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOworICAgIFJl
ZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIoZG9jdW1lbnQsICZjbGllbnQsIGZhbHNlLCByZXF1ZXN0LCBv
cHRpb25zKSk7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBM
b2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYs
IFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpCitQYXNzUmVmUHRyPERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcj4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoRG9jdW1lbnQq
IGRvY3VtZW50LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucykKIHsKICAg
ICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+
IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoZG9jdW1lbnQs
IGNsaWVudCwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRD
cmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkpOworICAgIFJlZlB0cjxEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIoZG9jdW1lbnQsIGNsaWVudCwgdHJ1ZSwgcmVxdWVzdCwgb3B0aW9ucykpOwog
ICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKICAgICAgICAgbG9hZGVyID0gMDsKICAgICByZXR1
cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAotRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxi
YWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9yZWRD
cmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpEb2N1
bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiBjbGllbnQsIGJvb2wgYXN5bmMsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucykKICAgICA6IG1fY2xpZW50KGNsaWVu
dCkKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykKKyAgICAs
IG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV9zYW1lT3JpZ2luUmVxdWVzdChkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkKLSAgICAsIG1fZGVu
eUNyb3NzT3JpZ2luUmVkaXJlY3QoY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSA9PSBEZW55Q3Jv
c3NPcmlnaW5SZWRpcmVjdCkKKyAgICAsIG1fYXN5bmMoYXN5bmMpCiB7CiAgICAgQVNTRVJUKGRv
Y3VtZW50KTsKICAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoc3RvcmVkQ3JlZGVudGlh
bHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyB8fCBzdG9yZWRDcmVkZW50aWFscyA9PSBEb05v
dEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIEFTU0VSVChjcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5ID09IERlbnlDcm9zc09yaWdpblJlZGlyZWN0IHx8IGNyb3NzT3JpZ2luUmVkaXJlY3RQ
b2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0KTsKLSAgICBtX2xvYWRlciA9IFN1YnJl
c291cmNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIGZh
bHNlLCBjYWxsYmFja3NTZXR0aW5nID09IFNlbmRMb2FkQ2FsbGJhY2tzLCBjb250ZW50U25pZmYg
PT0gU25pZmZDb250ZW50KTsKKworICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAgICBpZiAobV9z
YW1lT3JpZ2luUmVxdWVzdCkgeworICAgICAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgc2tpcENhbkxvYWRDaGVjaywgbV9vcHRp
b25zLnNlbmRMb2FkQ2FsbGJhY2tzLCBtX29wdGlvbnMuc25pZmZDb250ZW50KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9vcHRpb25zLmNyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbCkgeworICAgICAgICAvLyBUT0RPKGFhKTogSXMgdGhpcyB0aGUgcmlnaHQgd2F5IHRvIG5v
dGlmeSBlcnJvcnM/CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJyb3IoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fb3B0aW9ucy5mb3JjZUNyb3Nz
T3JpZ2luUHJlZmxpZ2h0ICYmIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KHJlcXVl
c3QuaHR0cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpIHsKKyAgICAgICAg
bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX2FjdHVhbFJlcXVlc3Quc2V0KG5ldyBSZXNvdXJjZVJlcXVlc3QocmVxdWVz
dCkpOworCisgICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFy
ZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpLCByZXF1ZXN0LnVybCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgcmVxdWVzdC5o
dHRwTWV0aG9kKCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkgeworICAgICAgICAgICAg
cHJlZmxpZ2h0U3VjY2VzcygpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1ha2VDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KHJlcXVlc3QpOworICAgIH0KK30KKwor
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vz
c1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVChp
c1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKTsKKworICAgIC8vIENyb3NzLW9yaWdpbiByZXF1ZXN0
cyBhcmUgb25seSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4gY2hl
Y2tpbmcgcmVzcG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBz
ZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBiZSBkZW5pZWQuCisgICAgaWYgKCFy
ZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKKyAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBwYXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBtb2Rp
Znkgc29tZSBkZXRhaWxzLgorICAgIFJlc291cmNlUmVxdWVzdCBjcm9zc09yaWdpblJlcXVlc3Qo
cmVxdWVzdCk7CisgICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Cisg
ICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSk7CisKKyAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxz
ZTsKKyAgICBsb2FkUmVxdWVzdChjcm9zc09yaWdpblJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2ss
IG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcywgbV9vcHRpb25zLnNuaWZmQ29udGVudCk7Cit9
CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NS
ZXF1ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgUmVzb3VyY2VSZXF1ZXN0IHByZWZsaWdodFJlcXVlc3QocmVxdWVzdC51cmwoKSk7CisgICAg
cHJlZmxpZ2h0UmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOworICAgIHByZWZsaWdodFJlcXVl
c3Quc2V0SFRUUE9yaWdpbihtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
KTsKKyAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBNZXRob2QoIk9QVElPTlMiKTsKKyAgICBw
cmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVz
dC1NZXRob2QiLCByZXF1ZXN0Lmh0dHBNZXRob2QoKSk7CisKKyAgICBjb25zdCBIVFRQSGVhZGVy
TWFwJiByZXF1ZXN0SGVhZGVyRmllbGRzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CisK
KyAgICBpZiAocmVxdWVzdEhlYWRlckZpZWxkcy5zaXplKCkgPiAwKSB7CisgICAgICAgIFZlY3Rv
cjxVQ2hhcj4gaGVhZGVyQnVmZmVyOworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuYmVnaW4oKTsKKyAgICAgICAgYXBwZW5kKGhl
YWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAgKytpdDsKKworICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmVuZCgpOwor
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBoZWFkZXJCdWZm
ZXIuYXBwZW5kKCcsJyk7CisgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Cisg
ICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOworICAgICAgICB9CisK
KyAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250
cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmluZzo6YWRvcHQoaGVhZGVyQnVmZmVyKSk7CisgICAg
ICAgIHByZWZsaWdodFJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhyZXF1ZXN0SGVhZGVyRmll
bGRzKTsKKyAgICB9CisKKyAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxzZTsKKyAgICBi
b29sIHNlbmRDYWxsYmFja3MgPSBmYWxzZTsKKyAgICBib29sIHNuaWZmQ29udGVudCA9IGZhbHNl
OworICAgIGxvYWRSZXF1ZXN0KHByZWZsaWdodFJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2ssIHNl
bmRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CiB9CiAKIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCkBAIC0xMjMsNyArMTY4LDcgQEAgdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUgogICAgIEFTU0VSVF9VTlVTRUQobG9h
ZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
YmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3Mt
ZG9tYWluIHJlcXVlc3RzLgotICAgIGlmIChtX2RlbnlDcm9zc09yaWdpblJlZGlyZWN0ICYmICFt
X2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7
CisgICAgaWYgKCFtX29wdGlvbnMuYWxsb3dDcm9zc09yaWdpblJlZGlyZWN0ICYmICFtX2RvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CiAgICAg
ICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7CiAgICAg
ICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICByZXF1ZXN0ID0g
UmVzb3VyY2VSZXF1ZXN0KCk7CkBAIC0xNDMsNyArMTg4LDMxIEBAIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRSZWNlaXYKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIEFTU0VS
VF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCi0gICAgbV9jbGllbnQtPmRp
ZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewor
ICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25z
LmFsbG93Q3JlZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKSB7CisgICAg
ICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+
IHByZWZsaWdodFJlc3VsdChuZXcgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0o
bV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpKTsKKyAgICAgICAgaWYgKCFwcmVmbGlnaHRSZXN1
bHQtPnBhcnNlKHJlc3BvbnNlKQorICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxs
b3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCkpCisgICAg
ICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMobV9h
Y3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKSB7CisgICAgICAgICAgICBwcmVmbGln
aHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBD
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5hcHBlbmRFbnRyeShtX2Rv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVy
bCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKKyAgICAgICAgICAgIGlmICghcGFzc2VzQWNjZXNz
Q29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscywgbV9kb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
RmFpbChSZXNvdXJjZUVycm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uo
cmVzcG9uc2UpOworICAgIH0KIH0KIAogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRp
ZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGhSZWNlaXZlZCkKQEAgLTE1OCw3ICsyMjcsMTYgQEAgdm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaAogewogICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2Fk
ZXIpOwogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRp
bmcobG9hZGVyLT5pZGVudGlmaWVyKCkpOworICAgIGRpZEZpbmlzaExvYWRpbmcobG9hZGVyLT5p
ZGVudGlmaWVyKCkpOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmlu
aXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fYWN0dWFs
UmVxdWVzdCkgeworICAgICAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOworICAgICAg
ICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5kaWRG
aW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKQEAgLTE3NCw3ICsyNTIsNyBAQCBib29sIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6Z2V0U2hvdWxkCiB7CiAgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBt
X2xvYWRlcik7CiAKLSAgICBpZiAoIW1fYWxsb3dTdG9yZWRDcmVkZW50aWFscykgeworICAgIGlm
ICghbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpIHsKICAgICAgICAgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjAw
LDQgKzI3OCw2MSBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cmVjZWl2ZWRDCiAg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjaGFsbGVu
Z2UuZmFpbHVyZVJlc3BvbnNlKCkpOwogfQogCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6cHJlZmxpZ2h0U3VjY2VzcygpCit7CisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gdHJ1
ZTsgIC8vIG9rIHRvIHNraXAgbG9hZCBjaGVjayBzaW5jZSB3ZSBhbHJlYWR5IGFza2VkIGFib3V0
IHRoZSBwcmVmbGlnaHQgcmVxdWVzdAorICAgIGJvb2wgc2VuZExvYWRDYWxsYmFja3MgPSBmYWxz
ZTsKKyAgICBib29sIHNuaWZmQ29udGVudCA9IGZhbHNlOworCisgICAgT3duUHRyPFJlc291cmNl
UmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKKyAgICBhY3R1YWxSZXF1ZXN0LnN3YXAobV9hY3R1YWxS
ZXF1ZXN0KTsKKyAgICBsb2FkUmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgc2tpcENhbkxvYWRDaGVj
aywgc2VuZExvYWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7Cit9CisKK3ZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRGYWlsdXJlKCkKK3sKKyAgICBtX2NsaWVudC0+ZGlk
RmFpbChSZXNvdXJjZUVycm9yKCkpOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNraXBD
YW5Mb2FkQ2hlY2ssIGJvb2wgc2VuZExvYWRDYWxsYmFja3MsIGJvb2wgc25pZmZDb250ZW50KQor
eworICAgIGlmIChtX2FzeW5jKSB7CisgICAgICAgIG1fbG9hZGVyID0gU3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBza2lwQ2FuTG9h
ZENoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoZSBvcHRpb24gcGFyYW1ldGVycyBh
cmUgdXNlZCBpbiB0aGUgc3luY2hyb25vdXMgcGF0aC4gQ3VycmVudGx5IG9ubHkgWEhSIHVzZXMg
dGhlIHN5bmNocm9ub3VzIHBhdGgsIGFuZCBpdCBkb2Vzbid0IG5lZWQgdGhlc2Ugb3B0aW9ucy4K
KyAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRD
cmVkZW50aWFsczsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFJlc291cmNlRXJyb3Ig
ZXJyb3I7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsK
KyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgaWRlbnRpZmllciA9IG1fZG9j
dW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVl
c3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworCisgICAgLy8g
Tm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyByZXNvdXJjZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0v
NDk2MjI5OD4uCisgICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhbiBIVFRQIHJlc3BvbnNlLCB0aGVu
IGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFjdC4KKyAgICBpZiAoIWVycm9yLmlzTnVs
bCgpICYmICFyZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgJiYgcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSA8PSAwKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGFsb25nIHdpdGgg
dGhlIG9uZSBpbiB3aWxsU2VuZFJlcXVlc3QgaXMgc3BlY2lmaWMgdG8geGhyIGFuZAorICAgIC8v
IHNob3VsZCBiZSBtYWRlIG1vcmUgZ2VuZXJpYy4KKyAgICAvLyBUT0RPKGFhKTogVGhpcyBkb2Vz
bid0IGxvb2sgdG8gbWUgbGlrZSBpdCB3aWxsIGFjdHVhbGx5IGZvbGxvdyByZWRpcmVjdHMuIElu
dmVzdGlnYXRlLgorICAgIGlmIChtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFtX2RvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3BvbnNlLnVybCgpKSkgeworICAgICAgICBt
X2NsaWVudC0+ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7CisKKyAgICBjb25zdCBjaGFy
KiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7CisgICAgaW50
IGxlbiA9IHN0YXRpY19jYXN0PGludD4oZGF0YS5zaXplKCkpOworICAgIGRpZFJlY2VpdmVEYXRh
KDAsIGJ5dGVzLCBsZW4pOworCisgICAgZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDQ2OTY0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
IAogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgpAQCAtNDQsOCArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlciwgcHJpdmF0ZSBTdWJyZXNv
dXJjZUxvYWRlckNsaWVudCAgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQgbG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBTdG9yZWRDcmVkZW50aWFscyk7Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gY3JlYXRlKERvY3VtZW50
KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRD
YWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYsIFRocmVhZGFibGVMb2FkZXJPcHRpb25zKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnQqLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMpOwogICAgICAgICB2aXJ0dWFsIH5Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIoKTsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CkBAIC01OCw3ICs1OSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZUxvYWRlcigp
IHsgZGVyZWYoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMs
IENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgYm9vbCBhc3luYywgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucyk7CisK
ICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlcios
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxC
eXRlc1RvQmVTZW50KTsKIApAQCAtNzEsMTIgKzczLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShT
dWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlcios
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAKKyAgICAgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIHZvaWQgbWFrZVNp
bXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpOworICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxp
Z2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CisgICAgICAgIHZvaWQgcHJlZmxp
Z2h0U3VjY2VzcygpOworICAgICAgICB2b2lkIHByZWZsaWdodEZhaWx1cmUoKTsKKworICAgICAg
ICB2b2lkIGxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2tpcENhbkxv
YWRDaGVjaywgYm9vbCBzZW5kTG9hZENhbGxiYWNrcywgYm9vbCBzbmlmZkNvbnRlbnQpOworCiAg
ICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgICAgIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVu
dDsKLSAgICAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgICAgIFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICAgICAgYm9vbCBtX3NhbWVPcmlnaW5S
ZXF1ZXN0OwotICAgICAgICBib29sIG1fZGVueUNyb3NzT3JpZ2luUmVkaXJlY3Q7CisgICAgICAg
IGJvb2wgbV9hc3luYzsKKyAgICAgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gbV9hY3R1YWxS
ZXF1ZXN0OyAgLy8gbm9uLW51bGwgZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZsaWdodCBjaGVj
a3MKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9UaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNDY5NjQpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMzMgKzQwLDMzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBUaHJlYWRh
YmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkgCitQYXNzUmVmUHRyPFRocmVhZGFi
bGVMb2FkZXI+IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucykgCiB7CiAg
ICAgQVNTRVJUKGNsaWVudCk7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogCiAjaWYgRU5BQkxFKFdP
UktFUlMpCiAgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQotICAgICAgICByZXR1
cm4gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PFdvcmtlckNvbnRl
eHQqPihjb250ZXh0KSwgY2xpZW50LCBXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpLCByZXF1
ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIGNs
aWVudCwgV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSwgcmVxdWVzdCwgb3B0aW9ucyk7CiAj
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCiAKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVu
dCgpKTsKLSAgICByZXR1cm4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgY2xpZW50LCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0
aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5KTsKKyAgICByZXR1cm4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgY2xpZW50LCByZXF1ZXN0LCBvcHRpb25zKTsK
IH0KIAotdm9pZCBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBTdG9yZWRDcmVkZW50aWFscyBz
dG9yZWRDcmVkZW50aWFscykKK3ZvaWQgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAKICNp
ZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsK
LSAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwg
c3RvcmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0KTsKKyAgICAgICAgV29y
a2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwgb3B0aW9ucyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCiAKICAgICBB
U1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKLSAgICBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250
ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBzdG9yZWRDcmVkZW50aWFscyk7CisgICAgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PERv
Y3VtZW50Kj4oY29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwgb3B0aW9ucyk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlz
aW9uIDQ2OTY0KQorKysgV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
OwogCi0gICAgZW51bSBMb2FkQ2FsbGJhY2tzIHsKLSAgICAgICAgU2VuZExvYWRDYWxsYmFja3Ms
Ci0gICAgICAgIERvTm90U2VuZExvYWRDYWxsYmFja3MKLSAgICB9OwotCi0gICAgZW51bSBDb250
ZW50U25pZmYgewotICAgICAgICBTbmlmZkNvbnRlbnQsCi0gICAgICAgIERvTm90U25pZmZDb250
ZW50Ci0gICAgfTsKLQogICAgIGVudW0gU3RvcmVkQ3JlZGVudGlhbHMgewogICAgICAgICBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLAogICAgICAgICBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMK
QEAgLTYzLDEyICs1MywyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFsbG93Q3Jv
c3NPcmlnaW5SZWRpcmVjdAogICAgIH07CiAKKyAgICBzdHJ1Y3QgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMgeworICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMoKSA6IHNlbmRMb2FkQ2FsbGJh
Y2tzKGZhbHNlKSwgc25pZmZDb250ZW50KGZhbHNlKSwgY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
KGZhbHNlKSwgYWxsb3dDcmVkZW50aWFscyhmYWxzZSksIGZvcmNlQ3Jvc3NPcmlnaW5QcmVmbGln
aHQoZmFsc2UpLCBhbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QoZmFsc2UpIHt9CisgICAgICBib29s
IHNlbmRMb2FkQ2FsbGJhY2tzOworICAgICAgYm9vbCBzbmlmZkNvbnRlbnQ7CisgICAgICBib29s
IGNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbDsKKyAgICAgIGJvb2wgYWxsb3dDcmVkZW50aWFsczsK
KyAgICAgIGJvb2wgZm9yY2VDcm9zc09yaWdpblByZWZsaWdodDsKKyAgICAgIGJvb2wgYWxsb3dD
cm9zc09yaWdpblJlZGlyZWN0OworICAgIH07CisKICAgICAvLyBVc2VmdWwgZm9yIGRvaW5nIGxv
YWRlciBvcGVyYXRpb25zIGZyb20gYW55IHRocmVhZCAobm90IHRocmVhZHNhZmUsIAogICAgIC8v
IGp1c3QgYWJsZSB0byBydW4gb24gdGhyZWFkcyBvdGhlciB0aGFuIHRoZSBtYWluIHRocmVhZCku
CiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50JiwgU3RvcmVkQ3JlZGVudGlhbHMpOwotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBMb2FkQ2FsbGJh
Y2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0
UG9saWN5KTsKKyAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJs
ZUxvYWRlckNsaWVudCYsIFRocmVhZGFibGVMb2FkZXJPcHRpb25zKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9
IDA7CiAgICAgICAgIHZvaWQgcmVmKCkgeyByZWZUaHJlYWRhYmxlTG9hZGVyKCk7IH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA0Njk2
NCkKKysrIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxMSArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
Y29uc3QgY2hhciBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5TW9kZVtdID0gImxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHlNb2RlIjsKIAotV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50U25pZmYgY29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorV29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFz
a01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlck9w
dGlvbnMgb3B0aW9ucykKICAgICA6IG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQogICAg
ICwgbV93b3JrZXJDbGllbnRXcmFwcGVyKFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpj
cmVhdGUoY2xpZW50KSkKLSAgICAsIG1fYnJpZGdlKCoobmV3IE1haW5UaHJlYWRCcmlkZ2UobV93
b3JrZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2Fk
ZXJQcm94eSgpLCB0YXNrTW9kZSwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNu
aWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkpKQorICAg
ICwgbV9icmlkZ2UoKihuZXcgTWFpblRocmVhZEJyaWRnZShtX3dvcmtlckNsaWVudFdyYXBwZXIs
IG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCksIHRhc2tNb2Rl
LCByZXF1ZXN0LCBvcHRpb25zKSkpCiB7CiB9CiAKQEAgLTY2LDcgKzY1LDcgQEAgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6fldvcmtlclRocmVhZGFibAogICAgIG1fYnJpZGdlLmRlc3Ryb3koKTsK
IH0KIAotdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBTdG9yZWRDcmVkZW50aWFs
cyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5KQordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBUaHJl
YWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zKQogewogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxv
b3AgPSB3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpOwogCkBAIC03NCw4ICs3Mywx
MyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjCiAgICAgU3RyaW5n
IG1vZGUgPSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5TW9kZTsKICAgICBtb2RlLmFwcGVuZChT
dHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKIAotICAgIENvbnRlbnRT
bmlmZiBjb250ZW50U25pZmYgPSByZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgPyBTbmlmZkNv
bnRlbnQgOiBEb05vdFNuaWZmQ29udGVudDsKLSAgICBSZWZQdHI8V29ya2VyVGhyZWFkYWJsZUxv
YWRlcj4gbG9hZGVyID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtlckNvbnRl
eHQsICZjbGllbnQsIG1vZGUsIHJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIGNvbnRl
bnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOwor
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHdoYXQgZG9jdW1lbnRzIGRvLiBX
aHk/CisgICAgaWYgKHJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgIG9wdGlvbnMu
c25pZmZDb250ZW50ID0gdHJ1ZTsKKworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSBm
YWxzZTsgIC8vIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBzZW5kIGNhbGxiYWNrcyBmb3Igc3lu
Y2hyb25vdXMgcmVxdWVzdHMuCisKKyAgICBSZWZQdHI8V29ya2VyVGhyZWFkYWJsZUxvYWRlcj4g
bG9hZGVyID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtlckNvbnRleHQsICZj
bGllbnQsIG1vZGUsIHJlcXVlc3QsIG9wdGlvbnMpOwogCiAgICAgTWVzc2FnZVF1ZXVlV2FpdFJl
c3VsdCByZXN1bHQgPSBNZXNzYWdlUXVldWVNZXNzYWdlUmVjZWl2ZWQ7CiAgICAgd2hpbGUgKCFs
b2FkZXItPmRvbmUoKSAmJiByZXN1bHQgIT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCkKQEAgLTkx
LDIxICs5NSwyMCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNhbmNlbCgpCiB9CiAK
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Ok1haW5UaHJlYWRCcmlk
Z2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50
V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcmIHRh
c2tNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxsYmFja3Mg
Y2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVu
dGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zKQogICAgIDogbV93b3JrZXJDbGllbnRX
cmFwcGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCiAgICAgLCBtX2xvYWRlclByb3h5KGxvYWRlclBy
b3h5KQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZS5jb3B5KCkpCiB7CiAgICAgQVNTRVJUKG1f
d29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1Rv
TG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENy
ZWF0ZUxvYWRlciwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZm
LCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkpOworICAgIG1f
bG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJl
YWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIsIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMp
KTsKIH0KIAogV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6fk1haW5U
aHJlYWRCcmlkZ2UoKQogewogfQogCi12b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5U
aHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgTWFpblRocmVhZEJyaWRnZSogdGhpc1B0ciwgYXV0b19wdHI8Q3Jvc3NUaHJl
YWRSZXNvdXJjZVJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSwgTG9hZENhbGxiYWNrcyBjYWxsYmFj
a3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyBz
dG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJl
ZGlyZWN0UG9saWN5KQordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJp
ZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIsIGF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEsIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlv
bnMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoY29udGV4dC0+
aXNEb2N1bWVudCgpKTsKQEAgLTExNyw3ICsxMjAsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVM
b2FkZXI6Ok1haW5UaHJlYWRCCiAgICAgLy8gRklYTUU6IElmIHRoZSBhIHNpdGUgcmVxdWVzdHMg
YSBsb2NhbCByZXNvdXJjZSwgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUg
YnV0IHRoZSBzeW5jIHBhdGgKICAgICAvLyB3aWxsIHJldHVybiBhIDAgdmFsdWUuICBFaXRoZXIg
dGhpcyBzaG91bGQgcmV0dXJuIDAgb3IgdGhlIG90aGVyIGNvZGUgcGF0aCBzaG91bGQgZG8gYSBj
YWxsYmFjayB3aXRoCiAgICAgLy8gYSBmYWlsdXJlLgotICAgIHRoaXNQdHItPm1fbWFpblRocmVh
ZExvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzUHRyLCAqcmVx
dWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywg
Y3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgdGhpc1B0ci0+bV9tYWluVGhyZWFkTG9h
ZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKGNvbnRleHQsIHRoaXNQdHIsICpyZXF1ZXN0
LCBvcHRpb25zKTsKICAgICBBU1NFUlQodGhpc1B0ci0+bV9tYWluVGhyZWFkTG9hZGVyKTsKIH0K
IApJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24g
NDY5NjQpCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDEwICs1NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4
dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBTdG9y
ZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxi
YWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9yZWRD
cmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBj
b25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkYWJsZUxvYWRlcih3b3JrZXJDb250ZXh0LCBj
bGllbnQsIHRhc2tNb2RlLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYs
IHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KSk7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZGFibGVMb2FkZXIod29ya2VyQ29u
dGV4dCwgY2xpZW50LCB0YXNrTW9kZSwgcmVxdWVzdCwgb3B0aW9ucykpOwogICAgICAgICB9CiAK
ICAgICAgICAgfldvcmtlclRocmVhZGFibGVMb2FkZXIoKTsKQEAgLTk3LDcgKzk3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlIDogVGhyZWFk
YWJsZUxvYWRlckNsaWVudCB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIC8vIEFsbCBl
eGVjdXRlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQncyB0aHJlYWQuCi0gICAgICAgICAgICBNYWlu
VGhyZWFkQnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+LCBX
b3JrZXJMb2FkZXJQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMs
IENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICAgICAgTWFpblRocmVhZEJyaWRn
ZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiwgV29ya2VyTG9hZGVy
UHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyk7CiAgICAgICAgICAgICB2b2lkIGNhbmNlbCgpOwogICAg
ICAgICAgICAgdm9pZCBkZXN0cm95KCk7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkRGVzdHJveShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgfk1h
aW5UaHJlYWRCcmlkZ2UoKTsKIAotICAgICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENy
ZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIHN0
ZDo6YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiwgTG9hZENhbGxiYWNr
cywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBv
bGljeSk7CisgICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKiwgc3RkOjphdXRvX3B0cjxD
cm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+LCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyk7
CiAgICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ2FuY2VsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKQEAgLTEzMyw3ICsxMzMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKICAg
ICAgICAgfTsKIAotICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQq
LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVk
ZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIFdvcmtlclRocmVh
ZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25z
dCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucyk7CiAKICAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29u
dGV4dDsKICAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiBtX3dv
cmtlckNsaWVudFdyYXBwZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29w
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5o
CShyZXZpc2lvbiA0Njk2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgU3RyaW5nOwogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VE
YXRhOwogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE7CisgICAgc3Ry
dWN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2ggewogICAgICAgICB0eXBlZGVmIFQg
VHlwZTsKQEAgLTY1LDYgKzY2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFQqPiA6IHB1
YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFQqPiB7CiAgICAgfTsKIAorICAgIHRl
bXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgVGhyZWFkYWJsZUxv
YWRlck9wdGlvbnM+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8VGhyZWFk
YWJsZUxvYWRlck9wdGlvbnM+IHsKKyAgICB9OworCiAgICAgLy8gQ3VzdG9tIGNvcHkgbWV0aG9k
cy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUPiA+ID4gewogICAgICAgICB0eXBlZGVm
IFBhc3NSZWZQdHI8VD4gVHlwZTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA0Njk2NCkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSwxMiBAQCB2b2lkIFdvcmtlclNj
cmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0gICAgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCksICpyZXF1ZXN0LCAqdGhpcywg
QWxsb3dTdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisKKyAg
ICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyA9IHRydWU7CisgICAgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgPSBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5ID8gQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0IDogRGVu
eUNyb3NzT3JpZ2luUmVkaXJlY3Q7CisKKyAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRF
eGVjdXRpb25Db250ZXh0KSwgKnJlcXVlc3QsICp0aGlzLCBvcHRpb25zKTsKIH0KICAgICAKIHZv
aWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBDcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3ksIFdvcmtlclNjcmlw
dExvYWRlckNsaWVudCogY2xpZW50KQpAQCAtNzIsNyArNzcsMTEgQEAgdm9pZCBXb3JrZXJTY3Jp
cHRMb2FkZXI6OmxvYWRBc3luY2hyb25vdQogICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV90aHJlYWRhYmxlTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRoaXMsICpyZXF1ZXN0LCBEb05vdFNlbmRMb2FkQ2Fs
bGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgY3Jvc3NP
cmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9u
czsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0cnVlOworICAgIG9wdGlvbnMuYWxs
b3dDcm9zc09yaWdpblJlZGlyZWN0ID0gY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSA/IEFsbG93
Q3Jvc3NPcmlnaW5SZWRpcmVjdCA6IERlbnlDcm9zc09yaWdpblJlZGlyZWN0OworCisgICAgbV90
aHJlYWRhYmxlTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIHRoaXMsICpyZXF1ZXN0LCBvcHRpb25zKTsKIH0KIAogUGFzc093blB0cjxSZXNv
dXJjZVJlcXVlc3Q+IFdvcmtlclNjcmlwdExvYWRlcjo6Y3JlYXRlUmVzb3VyY2VSZXF1ZXN0KCkK
SW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDQ2OTY0KQorKysgV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAj
aW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmgiCi0jaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtOTMsMjUgKzkyLDI1IEBAIHN0YXRpYyBi
b29sIGlzVmFsaWRUb2tlbihjb25zdCBTdHJpbmcmIG4KICAgICB1bnNpZ25lZCBsZW5ndGggPSBu
YW1lLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewogICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGMg
Pj0gMTI3IHx8IGMgPD0gMzIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAor
CiAgICAgICAgIGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8fCBjID09ICc8JyB8fCBjID09ICc+
JyB8fCBjID09ICdAJyB8fAogICAgICAgICAgICAgYyA9PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9
PSAnOicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJyB8fAogICAgICAgICAgICAgYyA9PSAnLycg
fHwgYyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycgfHwgYyA9PSAnPScgfHwKICAgICAg
ICAgICAgIGMgPT0gJ3snIHx8IGMgPT0gJ30nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQotICAgIAorCiBzdGF0aWMgYm9vbCBp
c1ZhbGlkSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0IAorICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0CiAgICAgLy8gZmllbGQtdmFsdWUgaW4g
c2VjdGlvbiA0LjIgb2YgUkZDIDI2MTYuCi0gICAgICAgIAorCiAgICAgcmV0dXJuICFuYW1lLmNv
bnRhaW5zKCdccicpICYmICFuYW1lLmNvbnRhaW5zKCdcbicpOwogfQogCkBAIC0xNDMsOSArMTQy
LDkgQEAgWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZQogICAgICwgbV9y
ZXNwb25zZVRleHQoIiIpCiAgICAgLCBtX2NyZWF0ZWREb2N1bWVudChmYWxzZSkKICAgICAsIG1f
ZXJyb3IoZmFsc2UpCisgICAgLCBtX3VwbG9hZEV2ZW50c0FsbG93ZWQodHJ1ZSkKICAgICAsIG1f
dXBsb2FkQ29tcGxldGUoZmFsc2UpCiAgICAgLCBtX3NhbWVPcmlnaW5SZXF1ZXN0KHRydWUpCi0g
ICAgLCBtX2luUHJlZmxpZ2h0KGZhbHNlKQogICAgICwgbV9kaWRUZWxsTG9hZGVyQWJvdXRSZXF1
ZXN0KGZhbHNlKQogICAgICwgbV9yZWNlaXZlZExlbmd0aCgwKQogICAgICwgbV9sYXN0U2VuZExp
bmVOdW1iZXIoMCkKQEAgLTIwNyw3ICsyMDYsNyBAQCBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6
OnJlc3BvbnNlWE1MKCkgCiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT53cml0ZShTdHJpbmco
bV9yZXNwb25zZVRleHQpKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmZpbmlzaFBhcnNp
bmcoKTsKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPmNsb3NlKCk7Ci0gICAgICAgICAgICAK
KwogICAgICAgICAgICAgaWYgKCFtX3Jlc3BvbnNlWE1MLT53ZWxsRm9ybWVkKCkpCiAgICAgICAg
ICAgICAgICAgbV9yZXNwb25zZVhNTCA9IDA7CiAgICAgICAgIH0KQEAgLTIzNiw3ICsyMzUsNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphZGRFdmVudExpc3RlbmVyKGNvCiAgICAgICAgIGZvciAo
TGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigp
OyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikKICAgICAg
ICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlz
dGVuZXIpOwogICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVy
cyk7CiAgICAgfQpAQCAtMzIyLDEwICszMjEsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Bl
bihjb25zdCBTdHJpbmcmIAogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCisKICAgICAvLyBNZXRob2QgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZl
LiBCdXQgc2luY2UgRmlyZWZveCB1cHBlcmNhc2VzIG1ldGhvZCBuYW1lcyBpdCBrbm93cywgd2Un
bGwgZG8gdGhlIHNhbWUuCiAgICAgU3RyaW5nIG1ldGhvZFVwcGVyKG1ldGhvZC51cHBlcigpKTsK
LSAgICAKKwogICAgIGlmIChtZXRob2RVcHBlciA9PSAiVFJBQ0UiIHx8IG1ldGhvZFVwcGVyID09
ICJUUkFDSyIgfHwgbWV0aG9kVXBwZXIgPT0gIkNPTk5FQ1QiKSB7CiAgICAgICAgIGVjID0gU0VD
VVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsNyArMzM0LDcgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogCiAgICAgaWYgKG1ldGhvZFVwcGVyID09
ICJDT1BZIiB8fCBtZXRob2RVcHBlciA9PSAiREVMRVRFIiB8fCBtZXRob2RVcHBlciA9PSAiR0VU
IiB8fCBtZXRob2RVcHBlciA9PSAiSEVBRCIKICAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIklO
REVYIiB8fCBtZXRob2RVcHBlciA9PSAiTE9DSyIgfHwgbWV0aG9kVXBwZXIgPT0gIk0tUE9TVCIg
fHwgbWV0aG9kVXBwZXIgPT0gIk1LQ09MIiB8fCBtZXRob2RVcHBlciA9PSAiTU9WRSIKLSAgICAg
ICAgfHwgbWV0aG9kVXBwZXIgPT0gIk9QVElPTlMiIHx8IG1ldGhvZFVwcGVyID09ICJQT1NUIiB8
fCBtZXRob2RVcHBlciA9PSAiUFJPUEZJTkQiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QUEFUQ0gi
IHx8IG1ldGhvZFVwcGVyID09ICJQVVQiIAorICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiT1BU
SU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QRklO
RCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBVVCIK
ICAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIlVOTE9DSyIpCiAgICAgICAgIG1fbWV0aG9kID0g
bWV0aG9kVXBwZXI7CiAgICAgZWxzZQpAQCAtMzU3LDcgKzM1Niw3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiAKIHsKICAgICBLVVJMIHVybFdpdGhDcmVkZW50aWFs
cyh1cmwpOwogICAgIHVybFdpdGhDcmVkZW50aWFscy5zZXRVc2VyKHVzZXIpOwotICAgIAorCiAg
ICAgb3BlbihtZXRob2QsIHVybFdpdGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0KIApAQCAt
MzY2LDcgKzM2NSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiAK
ICAgICBLVVJMIHVybFdpdGhDcmVkZW50aWFscyh1cmwpOwogICAgIHVybFdpdGhDcmVkZW50aWFs
cy5zZXRVc2VyKHVzZXIpOwogICAgIHVybFdpdGhDcmVkZW50aWFscy5zZXRQYXNzKHBhc3N3b3Jk
KTsKLSAgICAKKwogICAgIG9wZW4obWV0aG9kLCB1cmxXaXRoQ3JlZGVudGlhbHMsIGFzeW5jLCBl
Yyk7CiB9CiAKQEAgLTQ2MywzNCArNDYyLDIzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQo
RmlsZSogYm9keSwgRXgKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBVcGxvYWQgZXZlbnQgbGlzdGVuZXJzIHNob3VsZCBi
ZSBkaXNhbGxvd2VkIGZvciBzaW1wbGUgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLCBiZWNhdXNlIFBP
U1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBub3QKLSAgICAvLyBwZXJtaXQgY3Jvc3Mgb3JpZ2lu
IHJlcXVlc3RzIHNob3VsZCBsb29rIGV4YWN0bHkgbGlrZSBQT1NUaW5nIHRvIGFuIFVSTCB0aGF0
IGRvZXMgbm90IHJlc3BvbmQgYXQgYWxsLiBJZiBhIGxpc3RlbmVyIGV4aXN0cwotICAgIC8vIHdo
ZW4gY3JlYXRpbmcgdGhlIHJlcXVlc3QsIGl0IHdpbGwgZm9yY2UgcHJlZmxpZ2h0LgorICAgIC8v
IFRoZSBwcmVzZW5jZSBvZiB1cGxvYWQgZXZlbnQgbGlzdGVuZXJzIGZvcmNlcyB1cyB0byB1c2Ug
cHJlZmxpZ2h0aW5nIGJlY2F1c2UgUE9TVGluZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdAorICAg
IC8vIHBlcm1pdCBjcm9zcyBvcmlnaW4gcmVxdWVzdHMgc2hvdWxkIGxvb2sgZXhhY3RseSBsaWtl
IFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBub3QgcmVzcG9uZCBhdCBhbGwuCiAgICAgLy8g
QWxzbywgb25seSBhc3luYyByZXF1ZXN0cyBzdXBwb3J0IHVwbG9hZCBwcm9ncmVzcyBldmVudHMu
Ci0gICAgbV91cGxvYWRFdmVudHNBbGxvd2VkID0gZmFsc2U7CisgICAgYm9vbCBmb3JjZVByZWZs
aWdodCA9IGZhbHNlOwogICAgIGlmIChtX2FzeW5jKSB7CiAgICAgICAgIGRpc3BhdGNoTG9hZFN0
YXJ0RXZlbnQoKTsKICAgICAgICAgaWYgKG1fcmVxdWVzdEVudGl0eUJvZHkgJiYgbV91cGxvYWQp
IHsKLSAgICAgICAgICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9IG1fdXBsb2FkLT5oYXNMaXN0
ZW5lcnMoKTsKKyAgICAgICAgICAgIGZvcmNlUHJlZmxpZ2h0ID0gbV91cGxvYWQtPmhhc0xpc3Rl
bmVycygpOwogICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoTG9hZFN0YXJ0RXZlbnQoKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QobV91cmwpOwogCi0g
ICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KSB7Ci0gICAgICAgIG1ha2VDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3QoZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV91cGxvYWRF
dmVudHNBbGxvd2VkID0gdHJ1ZTsKLQotICAgIG1ha2VTYW1lT3JpZ2luUmVxdWVzdChlYyk7Ci19
Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om1ha2VTYW1lT3JpZ2luUmVxdWVzdChFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBBU1NFUlQobV9zYW1lT3JpZ2luUmVxdWVzdCk7CisgICAgLy8gV2Ug
YWxzbyByZW1lbWJlciB3aGV0aGVyIHVwbG9hZCBldmVudHMgc2hvdWxkIGJlIGFsbG93ZWQgZm9y
IHRoaXMgcmVxdWVzdCBpbiBjYXNlIHRoZSB1cGxvYWQgbGlzdGVuZXJzIGFyZQorICAgIC8vIGFk
ZGVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHN0YXJ0ZWQuCisgICAgbV91cGxvYWRFdmVudHNBbGxv
d2VkID0gIWlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KG1fbWV0aG9kLCBtX3JlcXVl
c3RIZWFkZXJzKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKICAgICBy
ZXF1ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwpAQCAtNTA0LDIwMiArNDkyLDI5IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6Om1ha2VTYW1lT3JpZ2luUmVxdWUKICAgICBpZiAobV9yZXF1ZXN0
SGVhZGVycy5zaXplKCkgPiAwKQogICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMo
bV9yZXF1ZXN0SGVhZGVycyk7CiAKLSAgICBpZiAobV9hc3luYykKLSAgICAgICAgbG9hZFJlcXVl
c3RBc3luY2hyb25vdXNseShyZXF1ZXN0KTsKLSAgICBlbHNlCi0gICAgICAgIGxvYWRSZXF1ZXN0
U3luY2hyb25vdXNseShyZXF1ZXN0LCBlYyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om1h
a2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNT
RVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKLQotICAgIGlmICghbV91cGxvYWRFdmVudHNBbGxv
d2VkICYmIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KG1fbWV0aG9kLCBtX3JlcXVl
c3RIZWFkZXJzKSkKLSAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChl
Yyk7Ci0gICAgZWxzZQotICAgICAgICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodChlYyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om1ha2VTaW1wbGVDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKGlzU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KG1fbWV0aG9kLCBtX3JlcXVlc3RIZWFkZXJzKSk7
CisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRM
b2FkQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwor
ICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sID0gdHJ1ZTsKKyAgICBvcHRpb25z
LmFsbG93Q3JlZGVudGlhbHMgPSBtX3NhbWVPcmlnaW5SZXF1ZXN0IHx8IG1faW5jbHVkZUNyZWRl
bnRpYWxzOworICAgIG9wdGlvbnMuZm9yY2VDcm9zc09yaWdpblByZWZsaWdodCA9IGZvcmNlUHJl
ZmxpZ2h0OworICAgIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblJlZGlyZWN0ID0gZmFsc2U7CiAK
LSAgICAvLyBDcm9zcy1vcmlnaW4gcmVxdWVzdHMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgSFRUUC4g
V2Ugd291bGQgY2F0Y2ggdGhpcyB3aGVuIGNoZWNraW5nIHJlc3BvbnNlIGhlYWRlcnMgbGF0ZXIs
IGJ1dCB0aGVyZSBpcyBubyByZWFzb24gdG8gc2VuZCBhIHJlcXVlc3QgdGhhdCdzIGd1YXJhbnRl
ZWQgdG8gYmUgZGVuaWVkLgotICAgIGlmICghbV91cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkg
ewotICAgICAgICBlYyA9IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uOjpORVRXT1JLX0VSUjsKLSAg
ICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBLVVJM
IHVybCA9IG1fdXJsOwotICAgIHVybC5zZXRVc2VyKFN0cmluZygpKTsKLSAgICB1cmwuc2V0UGFz
cyhTdHJpbmcoKSk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJl
cXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxvd0hUVFBD
b29raWVzKG1faW5jbHVkZUNyZWRlbnRpYWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBPcmlnaW4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsK
LQotICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVlc3Qu
YWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3JlcXVl
c3RFbnRpdHlCb2R5KSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0gICAg
ICAgIEFTU0VSVChtX21ldGhvZCAhPSAiSEVBRCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBC
b2R5KG1fcmVxdWVzdEVudGl0eUJvZHkucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9h
c3luYykKLSAgICAgICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShyZXF1ZXN0KTsKLSAgICBl
bHNlCi0gICAgICAgIGxvYWRSZXF1ZXN0U3luY2hyb25vdXNseShyZXF1ZXN0LCBlYyk7Ci19Ci0K
LXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJl
ZmxpZ2h0KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFN0cmluZyBvcmlnaW4gPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7Ci0gICAgS1VS
TCB1cmwgPSBtX3VybDsKLSAgICB1cmwuc2V0VXNlcihTdHJpbmcoKSk7Ci0gICAgdXJsLnNldFBh
c3MoU3RyaW5nKCkpOwotCi0gICAgaWYgKCFDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
OjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KG9yaWdpbiwgdXJsLCBtX2luY2x1ZGVDcmVkZW50
aWFscywgbV9tZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpKSB7Ci0gICAgICAgIG1faW5QcmVmbGln
aHQgPSB0cnVlOwotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdCh1cmwp
OwotICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBNZXRob2QoIk9QVElPTlMiKTsKLSAg
ICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIk9yaWdpbiIsIG9yaWdp
bik7Ci0gICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3Mt
Q29udHJvbC1SZXF1ZXN0LU1ldGhvZCIsIG1fbWV0aG9kKTsKLQotICAgICAgICBpZiAobV9yZXF1
ZXN0SGVhZGVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXI+IGhlYWRl
ckJ1ZmZlcjsKLSAgICAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9yZXF1ZXN0SGVhZGVycy5iZWdpbigpOwotICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1ZmZl
ciwgaXQtPmZpcnN0KTsKLSAgICAgICAgICAgICsraXQ7Ci0KLSAgICAgICAgICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdEhlYWRlcnMuZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaGVhZGVy
QnVmZmVyLmFwcGVuZCgnLCcpOwotICAgICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQo
JyAnKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFk
ZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgU3RyaW5nOjphZG9wdCho
ZWFkZXJCdWZmZXIpKTsKLSAgICAgICAgICAgIHByZWZsaWdodFJlcXVlc3QuYWRkSFRUUEhlYWRl
ckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2Fz
eW5jKSB7Ci0gICAgICAgICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSB0cnVlOwotICAgICAg
ICAgICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShwcmVmbGlnaHRSZXF1ZXN0KTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvYWRSZXF1ZXN0U3luY2hyb25v
dXNseShwcmVmbGlnaHRSZXF1ZXN0LCBlYyk7Ci0gICAgICAgIG1faW5QcmVmbGlnaHQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gU2VuZCB0aGUgYWN0dWFsIHJlcXVlc3QuCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
dXJsKTsKLSAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwotICAgIHJlcXVlc3Qu
c2V0QWxsb3dIVFRQQ29va2llcyhtX2luY2x1ZGVDcmVkZW50aWFscyk7Ci0gICAgcmVxdWVzdC5z
ZXRIVFRQSGVhZGVyRmllbGQoIk9yaWdpbiIsIG9yaWdpbik7Ci0KLSAgICBpZiAobV9yZXF1ZXN0
SGVhZGVycy5zaXplKCkgPiAwKQotICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMo
bV9yZXF1ZXN0SGVhZGVycyk7Ci0KLSAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9keSkgewotICAg
ICAgICBBU1NFUlQobV9tZXRob2QgIT0gIkdFVCIpOwotICAgICAgICBBU1NFUlQobV9tZXRob2Qg
IT0gIkhFQUQiKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShtX3JlcXVlc3RFbnRpdHlC
b2R5LnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIG1fZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgbV9l
cnJvciA9IGZhbHNlOwogCiAgICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAgbV91cGxvYWRFdmVu
dHNBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShyZXF1
ZXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvYWRSZXF1ZXN0U3luY2hyb25v
dXNseShyZXF1ZXN0LCBlYyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmhhbmRsZUFzeW5j
aHJvbm91c1ByZWZsaWdodFJlc3VsdCgpCi17Ci0gICAgQVNTRVJUKG1faW5QcmVmbGlnaHQpOwot
ICAgIEFTU0VSVChtX2FzeW5jKTsKLQotICAgIG1faW5QcmVmbGlnaHQgPSBmYWxzZTsKLQotICAg
IEtVUkwgdXJsID0gbV91cmw7Ci0gICAgdXJsLnNldFVzZXIoU3RyaW5nKCkpOwotICAgIHVybC5z
ZXRQYXNzKFN0cmluZygpKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0g
ICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEFsbG93
SFRUUENvb2tpZXMobV9pbmNsdWRlQ3JlZGVudGlhbHMpOwotICAgIHJlcXVlc3Quc2V0SFRUUE9y
aWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCkpOwotCi0gICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkKLSAgICAgICAgcmVx
dWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwotCi0gICAgaWYgKG1f
cmVxdWVzdEVudGl0eUJvZHkpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJHRVQiKTsK
LSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJIRUFEIik7Ci0gICAgICAgIHJlcXVlc3Quc2V0
SFRUUEJvZHkobV9yZXF1ZXN0RW50aXR5Qm9keS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIG1f
dXBsb2FkRXZlbnRzQWxsb3dlZCA9IHRydWU7Ci0gICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNs
eShyZXF1ZXN0KTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bG9hZFJlcXVlc3RTeW5jaHJv
bm91c2x5KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgQVNTRVJUKCFtX2FzeW5jKTsKLQotICAgIG1fbG9hZGVyID0gMDsKLSAgICBtX2V4Y2VwdGlv
bkNvZGUgPSAwOwotICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gKG1f
c2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHMpID8gQWxsb3dTdG9yZWRD
cmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICAgICAgcmVxdWVz
dC5zZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyh0cnVlKTsKKyAgICAgICAgc2V0UGVuZGluZ0FjdGl2
aXR5KHRoaXMpOworICAgICAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOworICAgIH0g
ZWxzZQorICAgICAgICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOwogCi0g
ICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIHJlcXVlc3QsICp0aGlzLCBzdG9yZWRDcmVkZW50aWFscyk7CiAgICAg
aWYgKCFtX2V4Y2VwdGlvbkNvZGUgJiYgbV9lcnJvcikKICAgICAgICAgbV9leGNlcHRpb25Db2Rl
ID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5FVFdPUktfRVJSOwogICAgIGVjID0gbV9leGNl
cHRpb25Db2RlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpsb2FkUmVxdWVzdEFzeW5jaHJv
bm91c2x5KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQobV9hc3luYyk7
Ci0gICAgbV9leGNlcHRpb25Db2RlID0gMDsKLSAgICAvLyBTdWJyZXNvdXJjZUxvYWRlcjo6Y3Jl
YXRlIGNhbiByZXR1cm4gbnVsbCBoZXJlLCBmb3IgZXhhbXBsZSBpZiB3ZSdyZSBubyBsb25nZXIg
YXR0YWNoZWQgdG8gYSBwYWdlLgotICAgIC8vIFRoaXMgaXMgdHJ1ZSB3aGlsZSBydW5uaW5nIG9u
dW5sb2FkIGhhbmRsZXJzLgotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gc2Vu
ZCBYTUxIdHRwUmVxdWVzdHMgZnJvbSBvbnVubG9hZCwgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwOTA0Pi4KLSAgICAvLyBGSVhNRTogTWF5YmUgY3JlYXRlIGNhbiBy
ZXR1cm4gbnVsbCBmb3Igb3RoZXIgcmVhc29ucyB0b28/Ci0gICAgTG9hZENhbGxiYWNrcyBjYWxs
YmFja3MgPSBtX2luUHJlZmxpZ2h0ID8gRG9Ob3RTZW5kTG9hZENhbGxiYWNrcyA6IFNlbmRMb2Fk
Q2FsbGJhY2tzOwotICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gKG1f
c2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHMpID8gQWxsb3dTdG9yZWRD
cmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLQotICAgIGlmIChtX3Vw
bG9hZCkKLSAgICAgICAgcmVxdWVzdC5zZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyh0cnVlKTsKLQot
ICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgc3Rv
cmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0KTsKLQotICAgIGlmIChtX2xv
YWRlcikgewotICAgICAgICAvLyBOZWl0aGVyIHRoaXMgb2JqZWN0IG5vciB0aGUgSmF2YVNjcmlw
dCB3cmFwcGVyIHNob3VsZCBiZSBkZWxldGVkIHdoaWxlCi0gICAgICAgIC8vIGEgcmVxdWVzdCBp
cyBpbiBwcm9ncmVzcyBiZWNhdXNlIHdlIG5lZWQgdG8ga2VlcCB0aGUgbGlzdGVuZXJzIGFsaXZl
LAotICAgICAgICAvLyBhbmQgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgSmF2YVNjcmlwdCB3
cmFwcGVyLgotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBGb3Igbm93IHdlIHNob3VsZCBvbmx5IGJhbGFuY2UgdGhlIG5vbkNhY2hlZCByZXF1
ZXN0IGNvdW50IGZvciBtYWluLXRocmVhZCBYSFJzIGFuZCBub3QKLSAgICAgICAgLy8gV29ya2Vy
IFhIUnMsIGFzIHRoZSBDYWNoZSBpcyBub3QgdGhyZWFkLXNhZmUuCi0gICAgICAgIC8vIFRoaXMg
d2lsbCBiZWNvbWUgaXJyZWxldmFudCBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjcxNjUgaXMgcmVzb2x2ZWQuCi0gICAgICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kaWRUZWxsTG9hZGVyQWJvdXRS
ZXF1ZXN0KTsKLSAgICAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVlc3RJ
bkZsaWdodChtX3VybCk7Ci0gICAgICAgICAgICBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3Qg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9y
dCgpCiB7CiAgICAgLy8gaW50ZXJuYWxBYm9ydCgpIGNhbGxzIGRyb3BQcm90ZWN0aW9uKCksIHdo
aWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KQEAgLTcxMSw3ICs1MjYsNyBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAKICAgICAvLyBDbGVhciBoZWFkZXJzIGFzIHJl
cXVpcmVkIGJ5IHRoZSBzcGVjCiAgICAgbV9yZXF1ZXN0SGVhZGVycy5jbGVhcigpOwotICAgIAor
CiAgICAgaWYgKChtX3N0YXRlIDw9IE9QRU5FRCAmJiAhc2VuZEZsYWcpIHx8IG1fc3RhdGUgPT0g
RE9ORSkKICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICBlbHNlIHsKQEAgLTc5NCw3ICs2
MDksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydEVycm9yKCkKICAgICB9CiB9CiAKLXZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkgICAgICAgIAordm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogewogI2lmIFVTRShKU0MpCiAgICAgLy8gVGhlIFhI
UiBvYmplY3QgaXRzZWxmIGhvbGRzIG9uIHRvIHRoZSByZXNwb25zZVRleHQsIGFuZApAQCAtODU0
LDcgKzY2OSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoY28KIAog
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBwYWlyPEhUVFBIZWFk
ZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFkZChuYW1l
LCB2YWx1ZSk7IAorICAgIHBhaXI8SFRUUEhlYWRlck1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3Vs
dCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5z
ZWNvbmQpCiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZTsKIH0K
QEAgLTkzOSw3ICs3NTQsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlTUlNRVR5
cGUoCiAgICAgfQogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIG1pbWVUeXBl
ID0gInRleHQveG1sIjsKLSAgICAKKwogICAgIHJldHVybiBtaW1lVHlwZTsKIH0KIApAQCAtOTgx
LDcgKzc5Niw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3UKICAg
ICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPm5vbkNhY2hlUmVxdWVzdENvbXBsZXRlKG1fdXJsKTsK
ICAgICAgICAgbV9kaWRUZWxsTG9hZGVyQWJvdXRSZXF1ZXN0ID0gZmFsc2U7CiAgICAgfQotICAg
IAorCiAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgaW4gYW4gZXJyb3Igc3RhdGUsIGZvciBpbnN0
YW5jZSB3ZSBjYWxsZWQgYWJvcnQoKSwgYmFpbCBvdXQgZWFybHkuCiAgICAgaWYgKG1fZXJyb3Ip
CiAgICAgICAgIHJldHVybjsKQEAgLTEwMTEsMTEgKzgyNiw2IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAgICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1faW5QcmVmbGlnaHQpIHsKLSAgICAgICAgZGlkRmluaXNoTG9hZGluZ1By
ZWZsaWdodCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKG1fc3RhdGUgPCBI
RUFERVJTX1JFQ0VJVkVEKQogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsK
IApAQCAtMTAzNSwxOSArODQ1LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9h
ZGluZyh1bgogICAgICAgICBkcm9wUHJvdGVjdGlvbigpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1
ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0KCkKLXsKLSAgICBBU1NFUlQobV9pblByZWZs
aWdodCk7Ci0gICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKLQotICAgIC8vIEZJWE1F
OiB0aGlzIGNhbiBwcm9iYWJseSBiZSBtb3ZlZCB0byBkaWRSZWNlaXZlUmVzcG9uc2VQcmVmbGln
aHQuCi0gICAgaWYgKG1fYXN5bmMpCi0gICAgICAgIGhhbmRsZUFzeW5jaHJvbm91c1ByZWZsaWdo
dFJlc3VsdCgpOwotCi0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICB1bnNldFBlbmRpbmdBY3Rp
dml0eSh0aGlzKTsKLX0KLQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCkKIHsKICAgICBpZiAoIW1fdXBsb2FkKQpAQCAtMTA2NSw0NSArODYyLDEyIEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKHVuc2lnbmUKIAogdm9pZCBYTUxIdHRwUmVxdWVz
dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewotICAgIGlmIChtX2luUHJlZmxpZ2h0KSB7Ci0gICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZVBy
ZWZsaWdodChyZXNwb25zZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
c2FtZU9yaWdpblJlcXVlc3QpIHsKLSAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hl
Y2socmVzcG9uc2UsIG1faW5jbHVkZUNyZWRlbnRpYWxzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrRXJyb3IoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQogICAgIG1fcmVzcG9uc2UgPSBy
ZXNwb25zZTsKICAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRp
YVR5cGUobV9taW1lVHlwZU92ZXJyaWRlKTsKICAgICBpZiAobV9yZXNwb25zZUVuY29kaW5nLmlz
RW1wdHkoKSkKICAgICAgICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVuY29k
aW5nTmFtZSgpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlUmVzcG9uc2VQ
cmVmbGlnaHQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQVNTRVJU
KG1faW5QcmVmbGlnaHQpOwotICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7Ci0KLSAg
ICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9pbmNsdWRlQ3JlZGVu
dGlhbHMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKLSAg
ICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBPd25Q
dHI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdChu
ZXcgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0obV9pbmNsdWRlQ3JlZGVudGlh
bHMpKTsKLSAgICBpZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UpCi0gICAgICAg
IHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luTWV0aG9kKG1fbWV0aG9kKQot
ICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMobV9y
ZXF1ZXN0SGVhZGVycykpIHsKLSAgICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQo
KS5hcHBlbmRFbnRyeShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCkt
PnRvU3RyaW5nKCksIG1fdXJsLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsKLX0KLQogdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIGZhaWx1cmVSZXNwb25zZSkKIHsKICAgICBtX3Jlc3BvbnNl
ID0gZmFpbHVyZVJlc3BvbnNlOwpAQCAtMTExMSwxMiArODc1LDEyIEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmRpZFJlY2VpdmVBdXRoZW50aWMKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKLSAgICBpZiAobV9pblByZWZs
aWdodCB8fCBtX2Vycm9yKQorICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobV9zdGF0ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0YXRlKEhF
QURFUlNfUkVDRUlWRUQpOwotICAKKwogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAgIGlm
ICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZGVjb2RlciA9
IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsIG1fcmVzcG9uc2VFbmNv
ZGluZyk7CkBAIC0xMjEwLDcgKzk3NCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNo
TG9hZFN0YXJ0RXYKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0Y2hQcm9ncmVzc0V2ZW50
KGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCkKIHsKLSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudChtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLnBy
b2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVjZWl2ZWRMZW5ndGggPD0gZXhwZWN0
ZWRMZW5ndGgsIAorICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1fb25Q
cm9ncmVzc0xpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgZXhwZWN0
ZWRMZW5ndGggJiYgbV9yZWNlaXZlZExlbmd0aCA8PSBleHBlY3RlZExlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9y
ZWNlaXZlZExlbmd0aCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHBlY3RlZExlbmd0aCkpOwog
fQogCkBAIC0xMjM1LDQgKzk5OSw0IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFhNTEh0dHBS
ZXF1ZXN0OjoKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDQ2OTY0KQorKysgV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIApA
QCAtMTM1LDEwICsxMzUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVk
aXJlY3RDaGVjaygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
YW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgLy8gU3BlY2lhbCB2
ZXJzaW9ucyBmb3IgdGhlIHByZWZsaWdodAotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlUHJl
ZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRp
bmdQcmVmbGlnaHQoKTsKLQogICAgIHZvaWQgdXBkYXRlQW5kRGlzcGF0Y2hPblByb2dyZXNzKHVu
c2lnbmVkIGludCBsZW4pOwogCiAgICAgU3RyaW5nIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsK
QEAgLTE1OSwxNiArMTU1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlUmVxdWVzdChF
eGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIG1ha2VTYW1lT3JpZ2luUmVxdWVzdChFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0
aFByZWZsaWdodChFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBoYW5kbGVBc3luY2hyb25vdXNQ
cmVmbGlnaHRSZXN1bHQoKTsKLQotICAgIHZvaWQgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KFJl
c291cmNlUmVxdWVzdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGxvYWRSZXF1ZXN0QXN5
bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0KICAgICB2b2lkIGdlbmVyaWNFcnJvcigp
OwogICAgIHZvaWQgbmV0d29ya0Vycm9yKCk7CiAgICAgdm9pZCBhYm9ydEVycm9yKCk7CkBAIC0y
MjMsMTMgKzIwOSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91cGxvYWRDb21wbGV0ZTsKIAog
ICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKLSAgICBib29sIG1fYWxsb3dBY2Nlc3M7Ci0g
ICAgYm9vbCBtX2luUHJlZmxpZ2h0OwogICAgIGJvb2wgbV9kaWRUZWxsTG9hZGVyQWJvdXRSZXF1
ZXN0OwogCiAgICAgLy8gVXNlZCBmb3Igb25wcm9ncmVzcyB0cmFja2luZwogICAgIGxvbmcgbG9u
ZyBtX3JlY2VpdmVkTGVuZ3RoOwotICAgIAorCiAgICAgdW5zaWduZWQgbV9sYXN0U2VuZExpbmVO
dW1iZXI7CiAgICAgU3RyaW5nIG1fbGFzdFNlbmRVUkw7CiAgICAgRXhjZXB0aW9uQ29kZSBtX2V4
Y2VwdGlvbkNvZGU7Cg==
</data>
<flag name="review"
          id="18613"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34531</attachid>
            <date>2009-08-10 17:50:12 -0700</date>
            <delta_ts>2009-08-11 17:46:30 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>bug28134.patch</filename>
            <type>text/plain</type>
            <size>55404</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMTAgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQlVH
IDI4MTM0OiBNb3ZlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgQWNjZXNzIENvbnRyb2wgZnJvbSBY
TUxIdHRwUmVxdWVzdCB0byBUaHJlYWRhYmxlRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzNAorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhZGRlZCBzaW5jZSBBY2Nlc3MgQ29udHJvbCB3YXMgYWxyZWFkeSB3ZWxsIHRlc3Rl
ZCBhbmQgdGhpcyBpcyBhIHB1cmUgcmVmYWN0b3IuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogTW92ZSBhIGxvdCBvZiB0aGUgYWNjZXNzIGNvbnRyb2wg
Y29kZSBmcm9tIFhIUiBpbiwgcHJlc2VydmluZyBpdHMKKyAgICAgICAgYmFzaWMgc3RyYXRlZ3ku
IEFsc28sIG1vZGlmeSB0aGUgc3luY2hyb25vdXMgcGF0aCB0byBub3QgYmUgYSBzcGVjaWFsIGNh
c2UsIGJ1dCByZXVzZSBtb3JlIG9mIHRoZSBhc3luYworICAgICAgICBwYXRoLgorCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBHbyB0aHJvdWdoIHRoZSBhc3luYyBwYXRoIGFuZCBwYXNzIGFkZGl0aW9uYWwgZmxh
Z3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6
IEdyb3VwIGVudW0gcGFyYW1zIGludG8gYW4gb3B0aW9ucyBzdHJ1Y3QuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KTogQnJvdWdodCBtb3N0bHkgZnJvbSBYSFIu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6IEhhbmRsZSBwcmVm
bGlnaHQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6IFByZWZsaWdodCBoYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6IENv
bW1vbiByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhc3luYy9zeW5jLgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDogR3JvdXAgZW51bSBwYXJhbXMgaW50
byBhbiBvcHRpb25zIHN0cnVjdC4KKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6VGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6RGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBBbGxv
dyBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB0byBiZSBjb3BpZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3JvdXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3Jv
dXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hy
b25vdXNseSk6IE1vcmUgZW51bS0+c3RydWN0IGdyb3VwaW5nLgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6IFJlbW92ZSBhbGwgdGhlIGFjY2VzcyBjb250cm9sIGNvZGUgYW5kIHNv
bWUgc3VwcG9ydGluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpY
TUxIdHRwUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZVJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuaDogRGl0dG8uCisKIDIwMDktMDgtMTAgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAkocmV2aXNpb24g
NDcwMDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgc3RydWN0IENy
b3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVz
b3VyY2VSZXF1ZXN0RGF0YTsKKyAgICBzdHJ1Y3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnM7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhy
b3VnaCB7CiAgICAgICAgIHR5cGVkZWYgVCBUeXBlOwpAQCAtNjUsNiArNjYsOSBAQAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFQq
PiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFQqPiB7CiAgICAgfTsKIAor
ICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnM+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnM+IHsKKyAgICB9OworCiAgICAgLy8gQ3VzdG9tIGNvcHkg
bWV0aG9kcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUPiA+ID4gewogICAgICAgICB0
eXBlZGVmIFBhc3NSZWZQdHI8VD4gVHlwZTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3Jp
cHRMb2FkZXIuY3BwCShyZXZpc2lvbiA0NzAwNSkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJT
Y3JpcHRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSwxMiBAQAogICAgICAg
ICByZXR1cm47CiAKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJD
b250ZXh0KCkpOwotICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCAqcmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kpOworCisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsK
KyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0cnVlOworICAgIG9wdGlvbnMuYWxsb3dD
cm9zc09yaWdpblJlZGlyZWN0ID0gY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSA/IEFsbG93Q3Jv
c3NPcmlnaW5SZWRpcmVjdCA6IERlbnlDcm9zc09yaWdpblJlZGlyZWN0OworCisgICAgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCksICpyZXF1ZXN0LCAqdGhpcywg
b3B0aW9ucyk7CiB9CiAgICAgCiB2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJv
bm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IEtVUkwmIHVybCwgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJlZGly
ZWN0UG9saWN5LCBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqIGNsaWVudCkKQEAgLTcyLDcgKzc3
LDExIEBACiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RocmVh
ZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgdGhpcywgKnJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIERvTm90U25pZmZD
b250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5
KTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuYWxs
b3dDcmVkZW50aWFscyA9IHRydWU7CisgICAgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luUmVkaXJl
Y3QgPSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5ID8gQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0
IDogRGVueUNyb3NzT3JpZ2luUmVkaXJlY3Q7CisKKyAgICBtX3RocmVhZGFibGVMb2FkZXIgPSBU
aHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdGhpcywgKnJl
cXVlc3QsIG9wdGlvbnMpOwogfQogCiBQYXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4gV29ya2Vy
U2NyaXB0TG9hZGVyOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDogV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAkocmV2aXNpb24gNDcwMDUpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJDYWNoZS5oIgog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wu
aCIKLSNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVk
ZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV2ZW50LmgiCkBAIC05MywyNSArOTIsMjUgQEAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1l
Lmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewog
ICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGMgPj0g
MTI3IHx8IGMgPD0gMzIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAg
ICAgICAgIGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8fCBjID09ICc8JyB8fCBjID09ICc+JyB8
fCBjID09ICdAJyB8fAogICAgICAgICAgICAgYyA9PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9PSAn
OicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJyB8fAogICAgICAgICAgICAgYyA9PSAnLycgfHwg
YyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycgfHwgYyA9PSAnPScgfHwKICAgICAgICAg
ICAgIGMgPT0gJ3snIHx8IGMgPT0gJ30nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQotICAgIAorCiBzdGF0aWMgYm9vbCBpc1Zh
bGlkSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0IAorICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0CiAgICAgLy8gZmllbGQtdmFsdWUgaW4gc2Vj
dGlvbiA0LjIgb2YgUkZDIDI2MTYuCi0gICAgICAgIAorCiAgICAgcmV0dXJuICFuYW1lLmNvbnRh
aW5zKCdccicpICYmICFuYW1lLmNvbnRhaW5zKCdcbicpOwogfQogCkBAIC0xNDMsOSArMTQyLDkg
QEAKICAgICAsIG1fcmVzcG9uc2VUZXh0KCIiKQogICAgICwgbV9jcmVhdGVkRG9jdW1lbnQoZmFs
c2UpCiAgICAgLCBtX2Vycm9yKGZhbHNlKQorICAgICwgbV91cGxvYWRFdmVudHNBbGxvd2VkKHRy
dWUpCiAgICAgLCBtX3VwbG9hZENvbXBsZXRlKGZhbHNlKQogICAgICwgbV9zYW1lT3JpZ2luUmVx
dWVzdCh0cnVlKQotICAgICwgbV9pblByZWZsaWdodChmYWxzZSkKICAgICAsIG1fZGlkVGVsbExv
YWRlckFib3V0UmVxdWVzdChmYWxzZSkKICAgICAsIG1fcmVjZWl2ZWRMZW5ndGgoMCkKICAgICAs
IG1fbGFzdFNlbmRMaW5lTnVtYmVyKDApCkBAIC0yMDcsNyArMjA2LDcgQEAKICAgICAgICAgICAg
IG1fcmVzcG9uc2VYTUwtPndyaXRlKFN0cmluZyhtX3Jlc3BvbnNlVGV4dCkpOwogICAgICAgICAg
ICAgbV9yZXNwb25zZVhNTC0+ZmluaXNoUGFyc2luZygpOwogICAgICAgICAgICAgbV9yZXNwb25z
ZVhNTC0+Y2xvc2UoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIW1fcmVzcG9u
c2VYTUwtPndlbGxGb3JtZWQoKSkKICAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MID0gMDsK
ICAgICAgICAgfQpAQCAtMjM2LDcgKzIzNSw3IEBACiAgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0
b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0
ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikKICAgICAgICAgICAgIGlmICgq
bGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKKwogICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwogICAg
ICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CiAgICAgfQpA
QCAtMzIyLDEwICszMjEsMTAgQEAKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgLy8gTWV0aG9kIG5hbWVzIGFyZSBjYXNlIHNlbnNp
dGl2ZS4gQnV0IHNpbmNlIEZpcmVmb3ggdXBwZXJjYXNlcyBtZXRob2QgbmFtZXMgaXQga25vd3Ms
IHdlJ2xsIGRvIHRoZSBzYW1lLgogICAgIFN0cmluZyBtZXRob2RVcHBlcihtZXRob2QudXBwZXIo
KSk7Ci0gICAgCisKICAgICBpZiAobWV0aG9kVXBwZXIgPT0gIlRSQUNFIiB8fCBtZXRob2RVcHBl
ciA9PSAiVFJBQ0siIHx8IG1ldGhvZFVwcGVyID09ICJDT05ORUNUIikgewogICAgICAgICBlYyA9
IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMzM1LDcgKzMzNCw3IEBACiAKICAg
ICBpZiAobWV0aG9kVXBwZXIgPT0gIkNPUFkiIHx8IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8
IG1ldGhvZFVwcGVyID09ICJHRVQiIHx8IG1ldGhvZFVwcGVyID09ICJIRUFEIgogICAgICAgICB8
fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8IG1ldGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRo
b2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVw
cGVyID09ICJNT1ZFIgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0
aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9k
VXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBVVCIgCisgICAgICAgIHx8
IG1ldGhvZFVwcGVyID09ICJPUFRJT05TIiB8fCBtZXRob2RVcHBlciA9PSAiUE9TVCIgfHwgbWV0
aG9kVXBwZXIgPT0gIlBST1BGSU5EIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUFBBVENIIiB8fCBt
ZXRob2RVcHBlciA9PSAiUFVUIgogICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiVU5MT0NLIikK
ICAgICAgICAgbV9tZXRob2QgPSBtZXRob2RVcHBlcjsKICAgICBlbHNlCkBAIC0zNTcsNyArMzU2
LDcgQEAKIHsKICAgICBLVVJMIHVybFdpdGhDcmVkZW50aWFscyh1cmwpOwogICAgIHVybFdpdGhD
cmVkZW50aWFscy5zZXRVc2VyKHVzZXIpOwotICAgIAorCiAgICAgb3BlbihtZXRob2QsIHVybFdp
dGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0KIApAQCAtMzY2LDcgKzM2NSw3IEBACiAgICAg
S1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0
VXNlcih1c2VyKTsKICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0UGFzcyhwYXNzd29yZCk7Ci0g
ICAgCisKICAgICBvcGVuKG1ldGhvZCwgdXJsV2l0aENyZWRlbnRpYWxzLCBhc3luYywgZWMpOwog
fQogCkBAIC00NjMsMzUgKzQ2MiwyNCBAQAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVS
ZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIC8vIFVwbG9hZCBldmVudCBsaXN0ZW5l
cnMgc2hvdWxkIGJlIGRpc2FsbG93ZWQgZm9yIHNpbXBsZSBjcm9zcy1vcmlnaW4gcmVxdWVzdHMs
IGJlY2F1c2UgUE9TVGluZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdAotICAgIC8vIHBlcm1pdCBj
cm9zcyBvcmlnaW4gcmVxdWVzdHMgc2hvdWxkIGxvb2sgZXhhY3RseSBsaWtlIFBPU1RpbmcgdG8g
YW4gVVJMIHRoYXQgZG9lcyBub3QgcmVzcG9uZCBhdCBhbGwuIElmIGEgbGlzdGVuZXIgZXhpc3Rz
Ci0gICAgLy8gd2hlbiBjcmVhdGluZyB0aGUgcmVxdWVzdCwgaXQgd2lsbCBmb3JjZSBwcmVmbGln
aHQuCisgICAgLy8gVGhlIHByZXNlbmNlIG9mIHVwbG9hZCBldmVudCBsaXN0ZW5lcnMgZm9yY2Vz
IHVzIHRvIHVzZSBwcmVmbGlnaHRpbmcgYmVjYXVzZSBQT1NUaW5nIHRvIGFuIFVSTCB0aGF0IGRv
ZXMgbm90CisgICAgLy8gcGVybWl0IGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBzaG91bGQgbG9vayBl
eGFjdGx5IGxpa2UgUE9TVGluZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdCByZXNwb25kIGF0IGFs
bC4KICAgICAvLyBBbHNvLCBvbmx5IGFzeW5jIHJlcXVlc3RzIHN1cHBvcnQgdXBsb2FkIHByb2dy
ZXNzIGV2ZW50cy4KLSAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBmYWxzZTsKKyAgICBib29s
IGZvcmNlUHJlZmxpZ2h0ID0gZmFsc2U7CiAgICAgaWYgKG1fYXN5bmMpIHsKICAgICAgICAgZGlz
cGF0Y2hMb2FkU3RhcnRFdmVudCgpOwogICAgICAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9keSAm
JiBtX3VwbG9hZCkgewotICAgICAgICAgICAgbV91cGxvYWRFdmVudHNBbGxvd2VkID0gbV91cGxv
YWQtPmhhc0xpc3RlbmVycygpOworICAgICAgICAgICAgZm9yY2VQcmVmbGlnaHQgPSBtX3VwbG9h
ZC0+aGFzTGlzdGVuZXJzKCk7CiAgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hMb2FkU3Rh
cnRFdmVudCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbV9zYW1lT3JpZ2luUmVxdWVzdCA9
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCht
X3VybCk7CiAKLSAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKLSAgICAgICAgbWFrZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdChlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
Ly8gV2UgYWxzbyByZW1lbWJlciB3aGV0aGVyIHVwbG9hZCBldmVudHMgc2hvdWxkIGJlIGFsbG93
ZWQgZm9yIHRoaXMgcmVxdWVzdCBpbiBjYXNlIHRoZSB1cGxvYWQgbGlzdGVuZXJzIGFyZQorICAg
IC8vIGFkZGVkIGFmdGVyIHRoZSByZXF1ZXN0IGlzIHN0YXJ0ZWQuCisgICAgbV91cGxvYWRFdmVu
dHNBbGxvd2VkID0gIWlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KG1fbWV0aG9kLCBt
X3JlcXVlc3RIZWFkZXJzKTsKIAotICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9IHRydWU7Ci0K
LSAgICBtYWtlU2FtZU9yaWdpblJlcXVlc3QoZWMpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0
OjptYWtlU2FtZU9yaWdpblJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJU
KG1fc2FtZU9yaWdpblJlcXVlc3QpOwotCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91
cmwpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7CiAKQEAgLTUwNCwyMDIg
KzQ5MiwyOSBAQAogICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCiAgICAgICAg
IHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKIAotICAgIGlm
IChtX2FzeW5jKQotICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVlc3QpOwot
ICAgIGVsc2UKLSAgICAgICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGVjKTsK
LX0KKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2Vu
ZExvYWRDYWxsYmFja3MgPSB0cnVlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7
CisgICAgb3B0aW9ucy5jcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wgPSB0cnVlOworICAgIG9wdGlv
bnMuYWxsb3dDcmVkZW50aWFscyA9IG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3Jl
ZGVudGlhbHM7CisgICAgb3B0aW9ucy5mb3JjZUNyb3NzT3JpZ2luUHJlZmxpZ2h0ID0gZm9yY2VQ
cmVmbGlnaHQ7CisgICAgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgPSBmYWxzZTsK
IAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOworICAg
IG1fZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgbV9lcnJvciA9IGZhbHNlOwogCi0gICAgaWYgKCFt
X3VwbG9hZEV2ZW50c0FsbG93ZWQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3Qo
bV9tZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpKQotICAgICAgICBtYWtlU2ltcGxlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0KGVjKTsKLSAgICBlbHNlCi0gICAgICAgIG1ha2VDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6
bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBBU1NFUlQoaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1f
cmVxdWVzdEhlYWRlcnMpKTsKLQotICAgIC8vIENyb3NzLW9yaWdpbiByZXF1ZXN0cyBhcmUgb25s
eSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4gY2hlY2tpbmcgcmVz
cG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBzZW5kIGEgcmVx
dWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBiZSBkZW5pZWQuCi0gICAgaWYgKCFtX3VybC5wcm90
b2NvbEluSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRp
b246Ok5FVFdPUktfRVJSOwotICAgICAgICBuZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEtVUkwgdXJsID0gbV91cmw7Ci0gICAgdXJsLnNldFVzZXIoU3RyaW5n
KCkpOwotICAgIHVybC5zZXRQYXNzKFN0cmluZygpKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KHVybCk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICBy
ZXF1ZXN0LnNldEFsbG93SFRUUENvb2tpZXMobV9pbmNsdWRlQ3JlZGVudGlhbHMpOwotICAgIHJl
cXVlc3Quc2V0SFRUUE9yaWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCkpOwotCi0gICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4g
MCkKLSAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMp
OwotCi0gICAgaWYgKG1fcmVxdWVzdEVudGl0eUJvZHkpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0
aG9kICE9ICJHRVQiKTsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJIRUFEIik7Ci0gICAg
ICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkobV9yZXF1ZXN0RW50aXR5Qm9keS5yZWxlYXNlKCkpOwot
ICAgIH0KLQotICAgIGlmIChtX2FzeW5jKQotICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91
c2x5KHJlcXVlc3QpOwotICAgIGVsc2UKLSAgICAgICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5
KHJlcXVlc3QsIGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFrZUNyb3NzT3JpZ2lu
QWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgU3Ry
aW5nIG9yaWdpbiA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
dG9TdHJpbmcoKTsKLSAgICBLVVJMIHVybCA9IG1fdXJsOwotICAgIHVybC5zZXRVc2VyKFN0cmlu
ZygpKTsKLSAgICB1cmwuc2V0UGFzcyhTdHJpbmcoKSk7Ci0KLSAgICBpZiAoIUNyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVmbGlnaHQob3JpZ2luLCB1
cmwsIG1faW5jbHVkZUNyZWRlbnRpYWxzLCBtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykpIHsK
LSAgICAgICAgbV9pblByZWZsaWdodCA9IHRydWU7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCBw
cmVmbGlnaHRSZXF1ZXN0KHVybCk7Ci0gICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUE1l
dGhvZCgiT1BUSU9OUyIpOwotICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJG
aWVsZCgiT3JpZ2luIiwgb3JpZ2luKTsKLSAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kIiwgbV9tZXRob2QpOwot
Ci0gICAgICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAg
IFZlY3RvcjxVQ2hhcj4gaGVhZGVyQnVmZmVyOwotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlcXVlc3RIZWFkZXJzLmJlZ2luKCk7Ci0gICAgICAgICAg
ICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOwotICAgICAgICAgICAgKytpdDsKLQot
ICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0
SGVhZGVycy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcsJyk7Ci0gICAgICAgICAgICAgICAg
aGVhZGVyQnVmZmVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgICAgIGFwcGVuZChoZWFkZXJC
dWZmZXIsIGl0LT5maXJzdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByZWZsaWdo
dFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRl
cnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1ZmZlcikpOwotICAgICAgICAgICAgcHJlZmxpZ2h0
UmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAgICAgIG1fdXBsb2FkRXZlbnRzQWxs
b3dlZCA9IHRydWU7Ci0gICAgICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHByZWZs
aWdodFJlcXVlc3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
bG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHByZWZsaWdodFJlcXVlc3QsIGVjKTsKLSAgICAgICAg
bV9pblByZWZsaWdodCA9IGZhbHNlOwotCi0gICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZW5kIHRoZSBhY3R1YWwgcmVxdWVzdC4KLSAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21l
dGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxvd0hUVFBDb29raWVzKG1faW5jbHVkZUNyZWRlbnRp
YWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiT3JpZ2luIiwgb3JpZ2luKTsK
LQotICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVlc3Qu
YWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3JlcXVl
c3RFbnRpdHlCb2R5KSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0gICAg
ICAgIEFTU0VSVChtX21ldGhvZCAhPSAiSEVBRCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBC
b2R5KG1fcmVxdWVzdEVudGl0eUJvZHkucmVsZWFzZSgpKTsKLSAgICB9Ci0KICAgICBpZiAobV9h
c3luYykgewotICAgICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSB0cnVlOwotICAgICAgICBs
b2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVlc3QpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgICAgICByZXF1ZXN0LnNldFJlcG9ydFVwbG9hZFByb2dyZXNzKHRydWUpOworICAgICAg
ICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgICAgIG1fbG9hZGVyID0gVGhyZWFkYWJs
ZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgcmVxdWVzdCwg
b3B0aW9ucyk7CisgICAgfSBlbHNlCisgICAgICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCByZXF1ZXN0LCAqdGhp
cywgb3B0aW9ucyk7CiAKLSAgICBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkocmVxdWVzdCwgZWMp
OwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpoYW5kbGVBc3luY2hyb25vdXNQcmVmbGlnaHRS
ZXN1bHQoKQotewotICAgIEFTU0VSVChtX2luUHJlZmxpZ2h0KTsKLSAgICBBU1NFUlQobV9hc3lu
Yyk7Ci0KLSAgICBtX2luUHJlZmxpZ2h0ID0gZmFsc2U7Ci0KLSAgICBLVVJMIHVybCA9IG1fdXJs
OwotICAgIHVybC5zZXRVc2VyKFN0cmluZygpKTsKLSAgICB1cmwuc2V0UGFzcyhTdHJpbmcoKSk7
Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJlcXVlc3Quc2V0SFRU
UE1ldGhvZChtX21ldGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxvd0hUVFBDb29raWVzKG1faW5j
bHVkZUNyZWRlbnRpYWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBPcmlnaW4oc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLQotICAgIGlmICht
X3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRl
ckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3JlcXVlc3RFbnRpdHlCb2R5
KSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0gICAgICAgIEFTU0VSVCht
X21ldGhvZCAhPSAiSEVBRCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KG1fcmVxdWVz
dEVudGl0eUJvZHkucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICBtX3VwbG9hZEV2ZW50c0FsbG93
ZWQgPSB0cnVlOwotICAgIGxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkocmVxdWVzdCk7Ci19Ci0K
LXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0U3luY2hyb25vdXNseShSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVCghbV9hc3lu
Yyk7Ci0KLSAgICBtX2xvYWRlciA9IDA7Ci0gICAgbV9leGNlcHRpb25Db2RlID0gMDsKLSAgICBT
dG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IChtX3NhbWVPcmlnaW5SZXF1ZXN0
IHx8IG1faW5jbHVkZUNyZWRlbnRpYWxzKSA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05v
dEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0KLSAgICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcmVxdWVzdCwgKnRo
aXMsIHN0b3JlZENyZWRlbnRpYWxzKTsKICAgICBpZiAoIW1fZXhjZXB0aW9uQ29kZSAmJiBtX2Vy
cm9yKQogICAgICAgICBtX2V4Y2VwdGlvbkNvZGUgPSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbjo6
TkVUV09SS19FUlI7CiAgICAgZWMgPSBtX2V4Y2VwdGlvbkNvZGU7CiB9CiAKLXZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQotewotICAgIEFTU0VSVChtX2FzeW5jKTsKLSAgICBtX2V4Y2VwdGlvbkNvZGUgPSAwOwot
ICAgIC8vIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgY2FuIHJldHVybiBudWxsIGhlcmUsIGZv
ciBleGFtcGxlIGlmIHdlJ3JlIG5vIGxvbmdlciBhdHRhY2hlZCB0byBhIHBhZ2UuCi0gICAgLy8g
VGhpcyBpcyB0cnVlIHdoaWxlIHJ1bm5pbmcgb251bmxvYWQgaGFuZGxlcnMuCi0gICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBzZW5kIFhNTEh0dHBSZXF1ZXN0cyBmcm9tIG9udW5s
b2FkLCA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5MDQ+LgotICAg
IC8vIEZJWE1FOiBNYXliZSBjcmVhdGUgY2FuIHJldHVybiBudWxsIGZvciBvdGhlciByZWFzb25z
IHRvbz8KLSAgICBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IG1faW5QcmVmbGlnaHQgPyBEb05v
dFNlbmRMb2FkQ2FsbGJhY2tzIDogU2VuZExvYWRDYWxsYmFja3M7Ci0gICAgU3RvcmVkQ3JlZGVu
dGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSAobV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX2luY2x1
ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzOwotCi0gICAgaWYgKG1fdXBsb2FkKQotICAgICAgICByZXF1ZXN0LnNldFJl
cG9ydFVwbG9hZFByb2dyZXNzKHRydWUpOwotCi0gICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9h
ZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBjYWxs
YmFja3MsIERvTm90U25pZmZDb250ZW50LCBzdG9yZWRDcmVkZW50aWFscywgRGVueUNyb3NzT3Jp
Z2luUmVkaXJlY3QpOwotCi0gICAgaWYgKG1fbG9hZGVyKSB7Ci0gICAgICAgIC8vIE5laXRoZXIg
dGhpcyBvYmplY3Qgbm9yIHRoZSBKYXZhU2NyaXB0IHdyYXBwZXIgc2hvdWxkIGJlIGRlbGV0ZWQg
d2hpbGUKLSAgICAgICAgLy8gYSByZXF1ZXN0IGlzIGluIHByb2dyZXNzIGJlY2F1c2Ugd2UgbmVl
ZCB0byBrZWVwIHRoZSBsaXN0ZW5lcnMgYWxpdmUsCi0gICAgICAgIC8vIGFuZCB0aGV5IGFyZSBy
ZWZlcmVuY2VkIGJ5IHRoZSBKYXZhU2NyaXB0IHdyYXBwZXIuCi0gICAgICAgIHNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBub3cgd2Ugc2hvdWxkIG9u
bHkgYmFsYW5jZSB0aGUgbm9uQ2FjaGVkIHJlcXVlc3QgY291bnQgZm9yIG1haW4tdGhyZWFkIFhI
UnMgYW5kIG5vdAotICAgICAgICAvLyBXb3JrZXIgWEhScywgYXMgdGhlIENhY2hlIGlzIG5vdCB0
aHJlYWQtc2FmZS4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGJlY29tZSBpcnJlbGV2YW50IGFmdGVy
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE2NSBpcyByZXNvbHZl
ZC4KLSAgICAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzV29ya2VyQ29udGV4
dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICAgICAg
QVNTRVJUKCFtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3QpOwotICAgICAgICAgICAgY2FjaGUo
KS0+bG9hZGVyKCktPm5vbkNhY2hlUmVxdWVzdEluRmxpZ2h0KG1fdXJsKTsKLSAgICAgICAgICAg
IG1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkKIHsKICAgICAvLyBpbnRlcm5hbEFib3J0
KCkgY2FsbHMgZHJvcFByb3RlY3Rpb24oKSwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxhc3QgcmVm
ZXJlbmNlLgpAQCAtNzExLDcgKzUyNiw3IEBACiAKICAgICAvLyBDbGVhciBoZWFkZXJzIGFzIHJl
cXVpcmVkIGJ5IHRoZSBzcGVjCiAgICAgbV9yZXF1ZXN0SGVhZGVycy5jbGVhcigpOwotICAgIAor
CiAgICAgaWYgKChtX3N0YXRlIDw9IE9QRU5FRCAmJiAhc2VuZEZsYWcpIHx8IG1fc3RhdGUgPT0g
RE9ORSkKICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICBlbHNlIHsKQEAgLTc5NCw3ICs2
MDksNyBAQAogICAgIH0KIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24o
KSAgICAgICAgCit2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiB7CiAjaWYg
VVNFKEpTQykKICAgICAvLyBUaGUgWEhSIG9iamVjdCBpdHNlbGYgaG9sZHMgb24gdG8gdGhlIHJl
c3BvbnNlVGV4dCwgYW5kCkBAIC04NTQsNyArNjY5LDcgQEAKIAogdm9pZCBYTUxIdHRwUmVxdWVz
dDo6c2V0UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBwYWlyPEhUVFBIZWFkZXJNYXA6Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7IAorICAgIHBh
aXI8SFRUUEhlYWRlck1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fcmVxdWVzdEhlYWRl
cnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJl
c3VsdC5maXJzdC0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZTsKIH0KQEAgLTkzOSw3ICs3NTQsNyBA
QAogICAgIH0KICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICBtaW1lVHlwZSA9
ICJ0ZXh0L3htbCI7Ci0gICAgCisKICAgICByZXR1cm4gbWltZVR5cGU7CiB9CiAKQEAgLTk4MSw3
ICs3OTYsNyBAQAogICAgICAgICBjYWNoZSgpLT5sb2FkZXIoKS0+bm9uQ2FjaGVSZXF1ZXN0Q29t
cGxldGUobV91cmwpOwogICAgICAgICBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3QgPSBmYWxz
ZTsKICAgICB9Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBpbiBhbiBlcnJvciBz
dGF0ZSwgZm9yIGluc3RhbmNlIHdlIGNhbGxlZCBhYm9ydCgpLCBiYWlsIG91dCBlYXJseS4KICAg
ICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTAxMSwxMSArODI2LDYgQEAKICAg
ICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW5QcmVmbGlnaHQp
IHsKLSAgICAgICAgZGlkRmluaXNoTG9hZGluZ1ByZWZsaWdodCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgaWYgKG1fc3RhdGUgPCBIRUFERVJTX1JFQ0VJVkVEKQogICAgICAgICBj
aGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsKIApAQCAtMTAzNSwxOSArODQ1LDYgQEAKICAg
ICAgICAgZHJvcFByb3RlY3Rpb24oKTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmlu
aXNoTG9hZGluZ1ByZWZsaWdodCgpCi17Ci0gICAgQVNTRVJUKG1faW5QcmVmbGlnaHQpOwotICAg
IEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7Ci0KLSAgICAvLyBGSVhNRTogdGhpcyBjYW4g
cHJvYmFibHkgYmUgbW92ZWQgdG8gZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0LgotICAgIGlm
IChtX2FzeW5jKQotICAgICAgICBoYW5kbGVBc3luY2hyb25vdXNQcmVmbGlnaHRSZXN1bHQoKTsK
LQotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
Ci19Ci0KIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCiB7CiAg
ICAgaWYgKCFtX3VwbG9hZCkKQEAgLTEwNjUsNDUgKzg2MiwxMiBAQAogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCiB7Ci0gICAgaWYgKG1faW5QcmVmbGlnaHQpIHsKLSAgICAgICAgZGlkUmVjZWl2ZVJlc3Bv
bnNlUHJlZmxpZ2h0KHJlc3BvbnNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghbV9zYW1lT3JpZ2luUmVxdWVzdCkgewotICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRy
b2xDaGVjayhyZXNwb25zZSwgbV9pbmNsdWRlQ3JlZGVudGlhbHMsIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtFcnJvcigp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgbV9yZXNwb25z
ZSA9IHJlc3BvbnNlOwogICAgIG1fcmVzcG9uc2VFbmNvZGluZyA9IGV4dHJhY3RDaGFyc2V0RnJv
bU1lZGlhVHlwZShtX21pbWVUeXBlT3ZlcnJpZGUpOwogICAgIGlmIChtX3Jlc3BvbnNlRW5jb2Rp
bmcuaXNFbXB0eSgpKQogICAgICAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSByZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVSZXNw
b25zZVByZWZsaWdodChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBB
U1NFUlQobV9pblByZWZsaWdodCk7Ci0gICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsK
LQotICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX2luY2x1ZGVD
cmVkZW50aWFscywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpKSkg
ewotICAgICAgICBuZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IE93blB0cjxDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4gcHJlZmxpZ2h0UmVz
dWx0KG5ldyBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbShtX2luY2x1ZGVDcmVk
ZW50aWFscykpOwotICAgIGlmICghcHJlZmxpZ2h0UmVzdWx0LT5wYXJzZShyZXNwb25zZSkKLSAg
ICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9tZXRo
b2QpCi0gICAgICAgIHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVy
cyhtX3JlcXVlc3RIZWFkZXJzKSkgewotICAgICAgICBuZXR3b3JrRXJyb3IoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNo
YXJlZCgpLmFwcGVuZEVudHJ5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmln
aW4oKS0+dG9TdHJpbmcoKSwgbV91cmwsIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkpOwotfQot
CiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRp
b24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgZmFpbHVyZVJlc3BvbnNlKQogewogICAgIG1fcmVz
cG9uc2UgPSBmYWlsdXJlUmVzcG9uc2U7CkBAIC0xMTExLDEyICs4NzUsMTIgQEAKIAogdm9pZCBY
TUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikK
IHsKLSAgICBpZiAobV9pblByZWZsaWdodCB8fCBtX2Vycm9yKQorICAgIGlmIChtX2Vycm9yKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9zdGF0ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAg
ICAgICAgIGNoYW5nZVN0YXRlKEhFQURFUlNfUkVDRUlWRUQpOwotICAKKwogICAgIGlmICghbV9k
ZWNvZGVyKSB7CiAgICAgICAgIGlmICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9w
bGFpbiIsIG1fcmVzcG9uc2VFbmNvZGluZyk7CkBAIC0xMjEwLDcgKzk3NCw3IEBACiAKIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChsb25nIGxvbmcgZXhwZWN0ZWRM
ZW5ndGgpCiB7Ci0gICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vblBy
b2dyZXNzTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBleHBlY3Rl
ZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLCAKKyAgICBkaXNw
YXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQo
KSwgZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVjZWl2
ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcmVjZWl2ZWRMZW5ndGgpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZXhwZWN0ZWRMZW5ndGgpKTsKIH0KIApAQCAtMTIzNSw0ICs5OTks
NCBAQAogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNDcwMDUpCisrKyBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogcHJp
dmF0ZToKICAgICBYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAg
CisKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmly
dHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KIApAQCAtMTM1LDEwICsx
MzUsNiBAQAogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogCi0gICAgLy8gU3BlY2lhbCB2ZXJzaW9ucyBmb3IgdGhlIHByZWZs
aWdodAotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdQcmVmbGlnaHQoKTsKLQogICAg
IHZvaWQgdXBkYXRlQW5kRGlzcGF0Y2hPblByb2dyZXNzKHVuc2lnbmVkIGludCBsZW4pOwogCiAg
ICAgU3RyaW5nIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKQEAgLTE1OSwxNiArMTU1LDYgQEAK
IAogICAgIHZvaWQgY3JlYXRlUmVxdWVzdChFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIG1h
a2VTYW1lT3JpZ2luUmVxdWVzdChFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYWtlQ3Jvc3NP
cmlnaW5BY2Nlc3NSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgbWFrZVNpbXBs
ZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYWtl
Q3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCBoYW5kbGVBc3luY2hyb25vdXNQcmVmbGlnaHRSZXN1bHQoKTsKLQotICAgIHZvaWQg
bG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KFJlc291cmNlUmVxdWVzdCYsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIGxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0Jik7
Ci0KICAgICB2b2lkIGdlbmVyaWNFcnJvcigpOwogICAgIHZvaWQgbmV0d29ya0Vycm9yKCk7CiAg
ICAgdm9pZCBhYm9ydEVycm9yKCk7CkBAIC0yMjMsMTMgKzIwOSwxMSBAQAogICAgIGJvb2wgbV91
cGxvYWRDb21wbGV0ZTsKIAogICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKLSAgICBib29s
IG1fYWxsb3dBY2Nlc3M7Ci0gICAgYm9vbCBtX2luUHJlZmxpZ2h0OwogICAgIGJvb2wgbV9kaWRU
ZWxsTG9hZGVyQWJvdXRSZXF1ZXN0OwogCiAgICAgLy8gVXNlZCBmb3Igb25wcm9ncmVzcyB0cmFj
a2luZwogICAgIGxvbmcgbG9uZyBtX3JlY2VpdmVkTGVuZ3RoOwotICAgIAorCiAgICAgdW5zaWdu
ZWQgbV9sYXN0U2VuZExpbmVOdW1iZXI7CiAgICAgU3RyaW5nIG1fbGFzdFNlbmRVUkw7CiAgICAg
RXhjZXB0aW9uQ29kZSBtX2V4Y2VwdGlvbkNvZGU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Xb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNDcwMDUpCisrKyBXZWJDb3JlL2xvYWRl
ci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUz
LDEwIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlNb2Rl
W10gPSAibG9hZFJlc291cmNlU3luY2hyb25vdXNseU1vZGUiOwogCi1Xb3JrZXJUaHJlYWRhYmxl
TG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9k
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNr
c1NldHRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRl
bnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xp
Y3kpCitXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwg
Y29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fd29ya2VyQ29u
dGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV93b3JrZXJDbGllbnRXcmFwcGVyKFRocmVhZGFi
bGVMb2FkZXJDbGllbnRXcmFwcGVyOjpjcmVhdGUoY2xpZW50KSkKLSAgICAsIG1fYnJpZGdlKCoo
bmV3IE1haW5UaHJlYWRCcmlkZ2UobV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtlckNvbnRl
eHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpLCB0YXNrTW9kZSwgcmVxdWVzdCwgY2Fs
bGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSkpKQorICAgICwgbV9icmlkZ2UoKihuZXcgTWFpblRocmVhZEJyaWRn
ZShtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtl
ckxvYWRlclByb3h5KCksIHRhc2tNb2RlLCByZXF1ZXN0LCBvcHRpb25zKSkpCiB7CiB9CiAKQEAg
LTY2LDcgKzY1LDcgQEAKICAgICBtX2JyaWRnZS5kZXN0cm95KCk7CiB9CiAKLXZvaWQgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQmIGNsaWVudCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkK
K3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29uc3QgVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IHdvcmtl
ckNvbnRleHQtPnRocmVhZCgpLT5ydW5Mb29wKCk7CiAKQEAgLTc0LDkgKzczLDcgQEAKICAgICBT
dHJpbmcgbW9kZSA9IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlNb2RlOwogICAgIG1vZGUuYXBw
ZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3JlYXRlVW5pcXVlSWQoKSkpOwogCi0gICAgQ29u
dGVudFNuaWZmIGNvbnRlbnRTbmlmZiA9IHJlcXVlc3QudXJsKCkuaXNMb2NhbEZpbGUoKSA/IFNu
aWZmQ29udGVudCA6IERvTm90U25pZmZDb250ZW50OwotICAgIFJlZlB0cjxXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyPiBsb2FkZXIgPSBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUod29ya2Vy
Q29udGV4dCwgJmNsaWVudCwgbW9kZSwgcmVxdWVzdCwgRG9Ob3RTZW5kTG9hZENhbGxiYWNrcywg
Y29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGlj
eSk7Ci0KKyAgICBSZWZQdHI8V29ya2VyVGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtlckNvbnRleHQsICZjbGllbnQsIG1vZGUsIHJl
cXVlc3QsIG9wdGlvbnMpOwogICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVzdWx0ID0gTWVz
c2FnZVF1ZXVlTWVzc2FnZVJlY2VpdmVkOwogICAgIHdoaWxlICghbG9hZGVyLT5kb25lKCkgJiYg
cmVzdWx0ICE9IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0ZWQpCiAgICAgICAgIHJlc3VsdCA9IHJ1bkxv
b3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1vZGUpOwpAQCAtOTEsMjEgKzg4LDIwIEBACiB9
CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Ok1haW5UaHJlYWRC
cmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xp
ZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcm
IHRhc2tNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxsYmFj
a3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3Jl
ZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kg
Y3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fd29y
a2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICwgbV9sb2FkZXJQcm94
eShsb2FkZXJQcm94eSkKICAgICAsIG1fdGFza01vZGUodGFza01vZGUuY29weSgpKQogewogICAg
IEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOwotICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1h
aW5UaHJlYWRDcmVhdGVMb2FkZXIsIHRoaXMsIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNv
bnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kp
KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNr
KCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyLCB0aGlzLCByZXF1ZXN0
LCBvcHRpb25zKSk7CiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlk
Z2U6On5NYWluVGhyZWFkQnJpZGdlKCkKIHsKIH0KIAotdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIsIGF1dG9fcHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEsIExvYWRDYWxsYmFj
a3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3Jl
ZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFp
blRocmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBNYWluVGhyZWFkQnJpZGdlKiB0aGlzUHRyLCBhdXRvX3B0cjxDcm9zc1Ro
cmVhZFJlc291cmNlUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhLCBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucyBvcHRpb25zKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJU
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CkBAIC0xMTcsNyArMTEzLDcgQEAKICAgICAvLyBGSVhN
RTogSWYgdGhlIGEgc2l0ZSByZXF1ZXN0cyBhIGxvY2FsIHJlc291cmNlLCB0aGVuIHRoaXMgd2ls
bCByZXR1cm4gYSBub24temVybyB2YWx1ZSBidXQgdGhlIHN5bmMgcGF0aAogICAgIC8vIHdpbGwg
cmV0dXJuIGEgMCB2YWx1ZS4gIEVpdGhlciB0aGlzIHNob3VsZCByZXR1cm4gMCBvciB0aGUgb3Ro
ZXIgY29kZSBwYXRoIHNob3VsZCBkbyBhIGNhbGxiYWNrIHdpdGgKICAgICAvLyBhIGZhaWx1cmUu
Ci0gICAgdGhpc1B0ci0+bV9tYWluVGhyZWFkTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3Jl
YXRlKGNvbnRleHQsIHRoaXNQdHIsICpyZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50
U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAg
ICB0aGlzUHRyLT5tX21haW5UaHJlYWRMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
Y29udGV4dCwgdGhpc1B0ciwgKnJlcXVlc3QsIG9wdGlvbnMpOwogICAgIEFTU0VSVCh0aGlzUHRy
LT5tX21haW5UaHJlYWRMb2FkZXIpOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9UaHJlYWRh
YmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9h
ZGVyLmNwcAkocmV2aXNpb24gNDcwMDUpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMzMgKzQwLDMzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVy
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxs
YmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kg
Y3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkgCitQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+
IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpIAogewogICAg
IEFTU0VSVChjbGllbnQpOwogICAgIEFTU0VSVChjb250ZXh0KTsKIAogI2lmIEVOQUJMRShXT1JL
RVJTKQogICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJu
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0
Kj4oY29udGV4dCksIGNsaWVudCwgV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSwgcmVxdWVz
dCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxl
TG9hZGVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBjbGll
bnQsIFdvcmtlclJ1bkxvb3A6OmRlZmF1bHRNb2RlKCksIHJlcXVlc3QsIG9wdGlvbnMpOwogI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQogCiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSk7Ci0gICAgcmV0dXJuIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oY29udGV4dCksIGNsaWVudCwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGlu
ZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBv
bGljeSk7CisgICAgcmV0dXJuIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIGNsaWVudCwgcmVxdWVzdCwgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgU3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMpCit2b2lkIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQsIGNvbnN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAgIEFTU0VSVChjb250ZXh0KTsK
IAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSkgewotICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xp
ZW50LCBzdG9yZWRDcmVkZW50aWFscywgRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QpOworICAgICAg
ICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRp
Y19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBvcHRpb25z
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAog
ICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KGNvbnRleHQpLCByZXF1ZXN0LCBjbGllbnQsIHN0b3JlZENyZWRlbnRpYWxzKTsKKyAgICBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBvcHRpb25zKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFi
bGVMb2FkZXIuaAkocmV2aXNpb24gNDcwMDUpCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMCBAQAogCiAgICAg
Y2xhc3MgV29ya2VyVGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRo
cmVhZGFibGVMb2FkZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlciB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRl
eHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgU3Rv
cmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBT
dHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxs
YmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kg
Y3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291
cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2FkZXI+IGNyZWF0
ZShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBj
bGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkYWJsZUxvYWRlcih3
b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5n
LCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9s
aWN5KSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZGFibGVM
b2FkZXIod29ya2VyQ29udGV4dCwgY2xpZW50LCB0YXNrTW9kZSwgcmVxdWVzdCwgb3B0aW9ucykp
OwogICAgICAgICB9CiAKICAgICAgICAgfldvcmtlclRocmVhZGFibGVMb2FkZXIoKTsKQEAgLTk3
LDcgKzk3LDcgQEAKICAgICAgICAgY2xhc3MgTWFpblRocmVhZEJyaWRnZSA6IFRocmVhZGFibGVM
b2FkZXJDbGllbnQgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAvLyBBbGwgZXhlY3V0
ZWQgb24gdGhlIHdvcmtlciBjb250ZXh0J3MgdGhyZWFkLgotICAgICAgICAgICAgTWFpblRocmVh
ZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiwgV29ya2Vy
TG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9z
c09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoUGFz
c1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlckxvYWRlclByb3h5
JiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAg
ICAgICAgICAgICB2b2lkIGRlc3Ryb3koKTsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAg
ICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgTWFpblRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgfk1haW5UaHJlYWRCcmlkZ2UoKTsK
IAotICAgICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIHN0ZDo6YXV0b19wdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBT
dG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgICAg
ICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBNYWluVGhyZWFkQnJpZGdlKiwgc3RkOjphdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdGE+LCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyk7CiAgICAgICAgICAgICBzdGF0
aWMgdm9pZCBtYWluVGhyZWFkQ2FuY2VsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhy
ZWFkQnJpZGdlKik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICAgU3Ry
aW5nIG1fdGFza01vZGU7CiAgICAgICAgIH07CiAKLSAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxv
YWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFN0cmlu
ZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRDYWxsYmFja3MsIENvbnRl
bnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOwor
ICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQqLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKIAogICAgICAgICBSZWZQdHI8
V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0OwogICAgICAgICBSZWZQdHI8VGhyZWFkYWJs
ZUxvYWRlckNsaWVudFdyYXBwZXI+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA0NzAwNSkKKysr
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDggKzQ1LDggQEAKIAogICAgIGNsYXNz
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBwcml2YXRlIFN1YnJlc291
cmNlTG9hZGVyQ2xpZW50ICB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIFN0b3JlZENyZWRlbnRpYWxzKTsKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnQq
LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENh
bGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRp
cmVjdFBvbGljeSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoRG9jdW1lbnQqLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgdmlydHVhbCB+RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwpAQCAtNTgsNyArNTks
MTMgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZUxvYWRlcigpIHsgZGVy
ZWYoKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
KERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBlbnVtIEJsb2NraW5nQmVoYXZpb3Igewor
ICAgICAgICAgICAgTG9hZFN5bmNocm9ub3VzbHksCisgICAgICAgICAgICBMb2FkQXN5bmNocm9u
b3VzbHkKKyAgICAgICAgfTsKKworICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9j
dW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgQmxvY2tpbmdCZWhhdmlvciBibG9ja2lu
Z0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyYgb3B0aW9ucyk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVz
dChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKIApAQCAtNzEsMTIgKzc4LDIxIEBA
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
U3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oU3VicmVzb3VyY2VMb2FkZXIq
LCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogCisgICAgICAgIHZvaWQgZGlkRmlu
aXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICB2b2lkIG1ha2VT
aW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KTsKKyAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZs
aWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOworICAgICAgICB2b2lkIHByZWZs
aWdodFN1Y2Nlc3MoKTsKKyAgICAgICAgdm9pZCBwcmVmbGlnaHRGYWlsdXJlKCk7CisKKyAgICAg
ICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNraXBDYW5M
b2FkQ2hlY2spOworCiAgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7
CiAgICAgICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAgICAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKLSAgICAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7
CisgICAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICAgICAgYm9v
bCBtX3NhbWVPcmlnaW5SZXF1ZXN0OwotICAgICAgICBib29sIG1fZGVueUNyb3NzT3JpZ2luUmVk
aXJlY3Q7CisgICAgICAgIGJvb2wgbV9hc3luYzsKKyAgICAgICAgT3duUHRyPFJlc291cmNlUmVx
dWVzdD4gbV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwgZHVyaW5nIEFjY2VzcyBDb250cm9s
IHByZWZsaWdodCBjaGVja3MKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA0NzAwNSkKKysrIFdlYkNvcmUv
bG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDYg
QEAKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQ7CiAKLSAgICBlbnVtIExvYWRDYWxsYmFja3MgewotICAgICAgICBTZW5k
TG9hZENhbGxiYWNrcywKLSAgICAgICAgRG9Ob3RTZW5kTG9hZENhbGxiYWNrcwotICAgIH07Ci0K
LSAgICBlbnVtIENvbnRlbnRTbmlmZiB7Ci0gICAgICAgIFNuaWZmQ29udGVudCwKLSAgICAgICAg
RG9Ob3RTbmlmZkNvbnRlbnQKLSAgICB9OwotCiAgICAgZW51bSBTdG9yZWRDcmVkZW50aWFscyB7
CiAgICAgICAgIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCiAgICAgICAgIERvTm90QWxsb3dTdG9y
ZWRDcmVkZW50aWFscwpAQCAtNjIsMTMgKzUyLDIzIEBACiAgICAgICAgIERlbnlDcm9zc09yaWdp
blJlZGlyZWN0LAogICAgICAgICBBbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QKICAgICB9OworICAg
IAorICAgIHN0cnVjdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB7CisgICAgICBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucygpIDogc2VuZExvYWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQo
ZmFsc2UpLCBjcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2woZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxz
KGZhbHNlKSwgZm9yY2VDcm9zc09yaWdpblByZWZsaWdodChmYWxzZSksIGFsbG93Q3Jvc3NPcmln
aW5SZWRpcmVjdChmYWxzZSkge30KKyAgICAgIGJvb2wgc2VuZExvYWRDYWxsYmFja3M7CisgICAg
ICBib29sIHNuaWZmQ29udGVudDsKKyAgICAgIGJvb2wgY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
OworICAgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOworICAgICAgYm9vbCBmb3JjZUNyb3NzT3Jp
Z2luUHJlZmxpZ2h0OworICAgICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3Q7CisgICAg
fTsKIAogICAgIC8vIFVzZWZ1bCBmb3IgZG9pbmcgbG9hZGVyIG9wZXJhdGlvbnMgZnJvbSBhbnkg
dGhyZWFkIChub3QgdGhyZWFkc2FmZSwgCiAgICAgLy8ganVzdCBhYmxlIHRvIHJ1biBvbiB0aHJl
YWRzIG90aGVyIHRoYW4gdGhlIG1haW4gdGhyZWFkKS4KICAgICBjbGFzcyBUaHJlYWRhYmxlTG9h
ZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBTdG9yZWRDcmVk
ZW50aWFscyk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVk
Q3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBzdGF0aWMg
dm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFk
YWJsZUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMmKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOwogICAgICAg
ICB2b2lkIHJlZigpIHsgcmVmVGhyZWFkYWJsZUxvYWRlcigpOyB9CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ3MDA1KQorKysg
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOCArMzIsOSBAQAogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5o
IgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNsdWRlICJDcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC00Myw2MSArNDQsMTAzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgU3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMpCit2b2lkIERvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYgY2xp
ZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBib29s
IHNhbWVPcmlnaW5SZXF1ZXN0ID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVl
c3QocmVxdWVzdC51cmwoKSk7CisgICAgLy8gTm90ZTogdGhlIGxvYWRlciB3aWxsIGJlIGRlbGV0
ZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgorICAgIFJlZlB0cjxEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIoZG9jdW1lbnQsICZjbGllbnQsIExvYWRTeW5jaHJvbm91c2x5LCByZXF1ZXN0LCBvcHRp
b25zKSk7CisgICAgQVNTRVJUKGxvYWRlci0+aGFzT25lUmVmKCkpOworfQogCi0gICAgVmVjdG9y
PGNoYXI+IGRhdGE7Ci0gICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwotICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChkb2N1bWVudC0+ZnJhbWUo
KSkKLSAgICAgICAgaWRlbnRpZmllciA9IGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3Is
IHJlc3BvbnNlLCBkYXRhKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBSZWZQdHI8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25vdXNseSwgcmVx
dWVzdCwgb3B0aW9ucykpOworICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKKyAgICAgICAgbG9h
ZGVyID0gMDsKKyAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKK30KIAotICAgIC8vIE5vIGV4
Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIy
OTg+LgotICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3
YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSAm
JiAhcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgPD0gMCkgewotICAgICAgICBjbGllbnQuZGlkRmFpbChlcnJvcik7CitEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCogZG9jdW1lbnQs
IFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgQmxvY2tpbmdCZWhhdmlvciBibG9ja2lu
Z0JlaGF2aW9yLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFi
bGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwg
bV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQorICAgICwgbV9z
YW1lT3JpZ2luUmVxdWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChy
ZXF1ZXN0LnVybCgpKSkKKyAgICAsIG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2FkQXN5
bmNocm9ub3VzbHkpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICBBU1NFUlQoY2xpZW50
KTsKKworICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAgICBpZiAobV9zYW1lT3JpZ2luUmVxdWVz
dCkgeworICAgICAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxzZTsKKyAgICAgICAgbG9h
ZFJlcXVlc3QocmVxdWVzdCwgc2tpcENhbkxvYWRDaGVjayk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBhbG9uZyB3aXRoIHRoZSBvbmUgaW4gd2ls
bFNlbmRSZXF1ZXN0IGlzIHNwZWNpZmljIHRvIHhociBhbmQKLSAgICAvLyBzaG91bGQgYmUgbWFk
ZSBtb3JlIGdlbmVyaWMuCi0gICAgaWYgKHNhbWVPcmlnaW5SZXF1ZXN0ICYmICFkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwoKSkpIHsKLSAgICAgICAg
Y2xpZW50LmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisgICAgaWYgKCFtX29wdGlvbnMuY3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNl
RXJyb3IoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjbGllbnQuZGlkUmVjZWl2
ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBpZiAoIW1fb3B0aW9ucy5mb3JjZUNyb3NzT3JpZ2lu
UHJlZmxpZ2h0ICYmIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KHJlcXVlc3QuaHR0
cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgIG1ha2VTaW1w
bGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QocmVxdWVzdCk7CisgICAgZWxzZSB7CisgICAgICAg
IG1fYWN0dWFsUmVxdWVzdC5zZXQobmV3IFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSk7CiAKLSAg
ICBjb25zdCBjaGFyKiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEo
KSk7Ci0gICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4oZGF0YS5zaXplKCkpOwotICAgIGNs
aWVudC5kaWRSZWNlaXZlRGF0YShieXRlcywgbGVuKTsKLQotICAgIGNsaWVudC5kaWRGaW5pc2hM
b2FkaW5nKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChkb2N1bWVudC0+c2VjdXJpdHlPcmln
aW4oKS0+dG9TdHJpbmcoKSwgcmVxdWVzdC51cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlh
bHMsIHJlcXVlc3QuaHR0cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisg
ICAgICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KHJlcXVlc3QpOworICAg
IH0KIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxs
YmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kg
Y3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjptYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIoZG9jdW1lbnQsIGNsaWVudCwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29u
dGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkp
OwotICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKLSAgICAgICAgbG9hZGVyID0gMDsKLSAgICBy
ZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoaXNTaW1wbGVDcm9zc09yaWdpbkFj
Y2Vzc1JlcXVlc3QocmVxdWVzdC5odHRwTWV0aG9kKCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxk
cygpKSk7CisKKyAgICAvLyBDcm9zcy1vcmlnaW4gcmVxdWVzdHMgYXJlIG9ubHkgZGVmaW5lZCBm
b3IgSFRUUC4gV2Ugd291bGQgY2F0Y2ggdGhpcyB3aGVuIGNoZWNraW5nIHJlc3BvbnNlIGhlYWRl
cnMgbGF0ZXIsIGJ1dCB0aGVyZSBpcyBubyByZWFzb24gdG8gc2VuZCBhIHJlcXVlc3QgdGhhdCdz
IGd1YXJhbnRlZWQgdG8gYmUgZGVuaWVkLgorICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2Nv
bEluSFRUUEZhbWlseSgpKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBNYWtlIGEgY29weSBvZiB0
aGUgcGFzc2VkIHJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHNvbWUgZGV0YWlscy4KKyAg
ICBSZXNvdXJjZVJlcXVlc3QgY3Jvc3NPcmlnaW5SZXF1ZXN0KHJlcXVlc3QpOworICAgIGNyb3Nz
T3JpZ2luUmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOworICAgIGNyb3NzT3JpZ2luUmVxdWVz
dC5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkp
OworCisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gZmFsc2U7CisgICAgbG9hZFJlcXVlc3Qo
Y3Jvc3NPcmlnaW5SZXF1ZXN0LCBza2lwQ2FuTG9hZENoZWNrKTsKIH0KIAotRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50
LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQotICAgIDogbV9jbGll
bnQoY2xpZW50KQotICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fYWxsb3dTdG9y
ZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
KQotICAgICwgbV9zYW1lT3JpZ2luUmVxdWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKSkKLSAgICAsIG1fZGVueUNyb3NzT3JpZ2luUmVkaXJl
Y3QoY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdCkK
K3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1
ZXN0V2l0aFByZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAg
QVNTRVJUKGRvY3VtZW50KTsKLSAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoc3RvcmVk
Q3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyB8fCBzdG9yZWRDcmVkZW50aWFs
cyA9PSBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIEFTU0VSVChjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5ID09IERlbnlDcm9zc09yaWdpblJlZGlyZWN0IHx8IGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0KTsKLSAgICBtX2xvYWRl
ciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJl
cXVlc3QsIGZhbHNlLCBjYWxsYmFja3NTZXR0aW5nID09IFNlbmRMb2FkQ2FsbGJhY2tzLCBjb250
ZW50U25pZmYgPT0gU25pZmZDb250ZW50KTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0
UmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAgICBwcmVmbGlnaHRSZXF1ZXN0LnJlbW92ZUNyZWRl
bnRpYWxzKCk7CisgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIHByZWZsaWdodFJlcXVlc3Quc2V0
SFRUUE1ldGhvZCgiT1BUSU9OUyIpOworICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCIsIHJlcXVlc3QuaHR0cE1ldGhv
ZCgpKTsKKworICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJGaWVsZHMgPSBy
ZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKKworICAgIGlmIChyZXF1ZXN0SGVhZGVyRmllbGRz
LnNpemUoKSA+IDApIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBoZWFkZXJCdWZmZXI7CisgICAg
ICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlckZpZWxk
cy5iZWdpbigpOworICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3QpOworICAg
ICAgICArK2l0OworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlcXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJywnKTsKKyAgICAgICAgICAg
IGhlYWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgIGFwcGVuZChoZWFkZXJCdWZm
ZXIsIGl0LT5maXJzdCk7CisgICAgICAgIH0KKworICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNl
dEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgU3RyaW5n
OjphZG9wdChoZWFkZXJCdWZmZXIpKTsKKyAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5hZGRIVFRQ
SGVhZGVyRmllbGRzKHJlcXVlc3RIZWFkZXJGaWVsZHMpOworICAgIH0KKworICAgIGJvb2wgc2tp
cENhbkxvYWRDaGVjayA9IGZhbHNlOworICAgIGxvYWRSZXF1ZXN0KHByZWZsaWdodFJlcXVlc3Qs
IHNraXBDYW5Mb2FkQ2hlY2spOwogfQogCiBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6On5Eb2N1
bWVudFRocmVhZGFibGVMb2FkZXIoKQpAQCAtMTIzLDcgKzE2Niw3IEBACiAgICAgQVNTRVJUX1VO
VVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CiAKICAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkcyB0byBiZSBmaXhlZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZv
ciBjcm9zcy1kb21haW4gcmVxdWVzdHMuCi0gICAgaWYgKG1fZGVueUNyb3NzT3JpZ2luUmVkaXJl
Y3QgJiYgIW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51
cmwoKSkpIHsKKyAgICBpZiAoIW1fb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgJiYg
IW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSkp
IHsKICAgICAgICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlz
KTsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAgICAgICAgIHJl
cXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKQEAgLTE0Myw3ICsxODYsMzEgQEAKICAgICBBU1NF
UlQobV9jbGllbnQpOwogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2Fk
ZXIpOwogCi0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAg
aWYgKG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xD
aGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCkpKSB7CisgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdChuZXcgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0obV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpKTsKKyAg
ICAgICAgaWYgKCFwcmVmbGlnaHRSZXN1bHQtPnBhcnNlKHJlc3BvbnNlKQorICAgICAgICAgICAg
fHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1
ZXN0LT5odHRwTWV0aG9kKCkpCisgICAgICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxv
d3NDcm9zc09yaWdpbkhlYWRlcnMobV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KSB7CisgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpz
aGFyZWQoKS5hcHBlbmRFbnRyeShtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKKyAgICAg
ICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMu
YWxsb3dDcmVkZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIH0KIH0KIAogdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKQEAgLTE1OCw5ICsy
MjUsMTggQEAKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKICAgICBBU1NFUlQo
bV9jbGllbnQpOwotICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGxvYWRlci0+aWRlbnRp
ZmllcigpKTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0K
IAordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAg
ICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKKyAgICAgICAgcHJlZmxpZ2h0U3VjY2Vz
cygpOworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVu
dGlmaWVyKTsKK30KKwogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3Vi
cmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAg
ICAgQVNTRVJUKG1fY2xpZW50KTsKQEAgLTE3NCw3ICsyNTAsNyBAQAogewogICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCi0gICAgaWYgKCFtX2FsbG93U3Rv
cmVkQ3JlZGVudGlhbHMpIHsKKyAgICBpZiAoIW1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKSB7
CiAgICAgICAgIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gZmFsc2U7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTIwMCw0ICsyNzYsNjEgQEAKICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9u
c2UoKSk7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNj
ZXNzKCkKK3sKKyAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OworICAg
IGFjdHVhbFJlcXVlc3Quc3dhcChtX2FjdHVhbFJlcXVlc3QpOworCisgICAgYm9vbCBza2lwQ2Fu
TG9hZENoZWNrID0gdHJ1ZTsgIC8vIG9rIHRvIHNraXAgbG9hZCBjaGVjayBzaW5jZSB3ZSBhbHJl
YWR5IGFza2VkIGFib3V0IHRoZSBwcmVmbGlnaHQgcmVxdWVzdAorICAgIGxvYWRSZXF1ZXN0KCph
Y3R1YWxSZXF1ZXN0LCBza2lwQ2FuTG9hZENoZWNrKTsKK30KKwordm9pZCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OnByZWZsaWdodEZhaWx1cmUoKQoreworICAgIG1fY2xpZW50LT5kaWRGYWls
KFJlc291cmNlRXJyb3IoKSk7Cit9CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjps
b2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2tpcENhbkxv
YWRDaGVjaykKK3sKKyAgICBpZiAobV9hc3luYykgeworICAgICAgICAvLyBEb24ndCBzbmlmZiBj
b250ZW50IG9yIHNlbmQgbG9hZCBjYWxsYmFja3MgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4K
KyAgICAgICAgYm9vbCBzZW5kTG9hZENhbGxiYWNrcyA9IG1fb3B0aW9ucy5zZW5kTG9hZENhbGxi
YWNrcyAmJiAhbV9hY3R1YWxSZXF1ZXN0OworICAgICAgICBib29sIHNuaWZmQ29udGVudCA9IG1f
b3B0aW9ucy5zbmlmZkNvbnRlbnQgJiYgIW1fYWN0dWFsUmVxdWVzdDsKKyAgICAgICAgbV9sb2Fk
ZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMs
IHJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2ssIHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRl
bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFRocmVhZGFibGVM
b2FkZXJPcHRpb25zLnNuaWZmQ29udGVudCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzeW5jaHJvbm91
cyByZXF1ZXN0cy4KKyAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IG1f
b3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFJl
c291cmNlRXJyb3IgZXJyb3I7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxv
bmc+OjptYXgoKTsKKyAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgaWRlbnRp
ZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEp
OworCisgICAgLy8gTm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyByZXNvdXJjZXMsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNDk2MjI5OD4uCisgICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhbiBIVFRQIHJl
c3BvbnNlLCB0aGVuIGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFjdC4KKyAgICBpZiAo
IWVycm9yLmlzTnVsbCgpICYmICFyZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgJiYgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAwKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNr
IGFsb25nIHdpdGggdGhlIG9uZSBpbiB3aWxsU2VuZFJlcXVlc3QgaXMgc3BlY2lmaWMgdG8geGhy
IGFuZAorICAgIC8vIHNob3VsZCBiZSBtYWRlIG1vcmUgZ2VuZXJpYy4KKyAgICBpZiAobV9zYW1l
T3JpZ2luUmVxdWVzdCAmJiAhbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVz
dChyZXNwb25zZS51cmwoKSkpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWxSZWRpcmVjdENo
ZWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2Uo
MCwgcmVzcG9uc2UpOworCisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRh
dGEuc2l6ZSgpKTsKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVuKTsKKworICAgIGRp
ZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="18689"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34620</attachid>
            <date>2009-08-11 17:46:30 -0700</date>
            <delta_ts>2009-08-13 16:52:20 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>bug28134.patch</filename>
            <type>text/plain</type>
            <size>56721</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzA3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMTEgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQlVH
IDI4MTM0OiBNb3ZlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgQWNjZXNzIENvbnRyb2wgZnJvbSBY
TUxIdHRwUmVxdWVzdCB0byBUaHJlYWRhYmxlRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzNAorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhZGRlZCBzaW5jZSBBY2Nlc3MgQ29udHJvbCB3YXMgYWxyZWFkeSB3ZWxsIHRlc3Rl
ZCBhbmQgdGhpcyBpcyBhIHB1cmUgcmVmYWN0b3IuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogTW92ZSBhIGxvdCBvZiB0aGUgYWNjZXNzIGNvbnRyb2wg
Y29kZSBmcm9tIFhIUiBpbiwgcHJlc2VydmluZyBpdHMKKyAgICAgICAgYmFzaWMgc3RyYXRlZ3ku
IEFsc28sIG1vZGlmeSB0aGUgc3luY2hyb25vdXMgcGF0aCB0byBub3QgYmUgYSBzcGVjaWFsIGNh
c2UsIGJ1dCByZXVzZSBtb3JlIG9mIHRoZSBhc3luYworICAgICAgICBwYXRoLgorCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBHbyB0aHJvdWdoIHRoZSBhc3luYyBwYXRoIGFuZCBwYXNzIGFkZGl0aW9uYWwgZmxh
Z3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6
IEdyb3VwIGVudW0gcGFyYW1zIGludG8gYW4gb3B0aW9ucyBzdHJ1Y3QuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KTogQnJvdWdodCBtb3N0bHkgZnJvbSBYSFIu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6IEhhbmRsZSBwcmVm
bGlnaHQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6IFByZWZsaWdodCBoYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6IENv
bW1vbiByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhc3luYy9zeW5jLgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDogR3JvdXAgZW51bSBwYXJhbXMgaW50
byBhbiBvcHRpb25zIHN0cnVjdC4KKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6VGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6RGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBBbGxv
dyBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB0byBiZSBjb3BpZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3JvdXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3Jv
dXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hy
b25vdXNseSk6IE1vcmUgZW51bS0+c3RydWN0IGdyb3VwaW5nLgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6IFJlbW92ZSBhbGwgdGhlIGFjY2VzcyBjb250cm9sIGNvZGUgYW5kIHNv
bWUgc3VwcG9ydGluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpY
TUxIdHRwUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZVJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuaDogRGl0dG8uCisKIDIwMDktMDgtMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGlu
Z0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gVHJlYXQuCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ3
MDc0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNs
dWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRlICJDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC00Myw2MSAr
NDQsMTAzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNs
aWVudCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMpCit2b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBib29sIHNhbWVPcmlnaW5SZXF1ZXN0ID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAg
ICBSZXNvdXJjZUVycm9yIGVycm9yOwotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0g
ICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBsb25nPjo6bWF4KCk7Ci0gICAgaWYgKGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBpZGVu
dGlmaWVyID0gZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEp
OwotCi0gICAgLy8gTm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyByZXNvdXJjZXMsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNDk2MjI5OD4uCi0gICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhbiBIVFRQIHJl
c3BvbnNlLCB0aGVuIGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFjdC4KLSAgICBpZiAo
IWVycm9yLmlzTnVsbCgpICYmICFyZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgJiYgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAwKSB7Ci0gICAgICAgIGNsaWVudC5kaWRGYWlsKGVycm9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGFs
b25nIHdpdGggdGhlIG9uZSBpbiB3aWxsU2VuZFJlcXVlc3QgaXMgc3BlY2lmaWMgdG8geGhyIGFu
ZAotICAgIC8vIHNob3VsZCBiZSBtYWRlIG1vcmUgZ2VuZXJpYy4KLSAgICBpZiAoc2FtZU9yaWdp
blJlcXVlc3QgJiYgIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3Bv
bnNlLnVybCgpKSkgewotICAgICAgICBjbGllbnQuZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UocmVz
cG9uc2UpOwotCi0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6
ZSgpKTsKLSAgICBjbGllbnQuZGlkUmVjZWl2ZURhdGEoYnl0ZXMsIGxlbik7Ci0KLSAgICBjbGll
bnQuZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKKyAgICAvLyBUaGUgbG9hZGVyIHdpbGwg
YmUgZGVsZXRlZCBhcyBzb29uIGFzIHRoaXMgZnVuY3Rpb24gZXhpdHMuCisgICAgUmVmUHRyPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcihkb2N1bWVudCwgJmNsaWVudCwgTG9hZFN5bmNocm9ub3VzbHksIHJlcXVl
c3QsIG9wdGlvbnMpKTsKKyAgICBBU1NFUlQobG9hZGVyLT5oYXNPbmVSZWYoKSk7CiB9CiAKLVBh
c3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxi
YWNrc1NldHRpbmcsIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxz
IHN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kpCitQYXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBh
ZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIHJl
cXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMs
IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
KGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykp
OwogICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKICAgICAgICAgbG9hZGVyID0gMDsKICAgICBy
ZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAotRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENh
bGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGlj
eSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIEJsb2NraW5nQmVoYXZpb3IgYmxvY2tpbmdCZWhhdmlvciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyYgb3B0aW9ucykKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCi0gICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMg
PT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAg
ICwgbV9zYW1lT3JpZ2luUmVxdWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVx
dWVzdChyZXF1ZXN0LnVybCgpKSkKLSAgICAsIG1fZGVueUNyb3NzT3JpZ2luUmVkaXJlY3QoY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdCkKKyAgICAs
IG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2FkQXN5bmNocm9ub3VzbHkpCiB7CiAgICAg
QVNTRVJUKGRvY3VtZW50KTsKICAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoc3RvcmVk
Q3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyB8fCBzdG9yZWRDcmVkZW50aWFs
cyA9PSBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIEFTU0VSVChjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5ID09IERlbnlDcm9zc09yaWdpblJlZGlyZWN0IHx8IGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0KTsKLSAgICBtX2xvYWRl
ciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJl
cXVlc3QsIGZhbHNlLCBjYWxsYmFja3NTZXR0aW5nID09IFNlbmRMb2FkQ2FsbGJhY2tzLCBjb250
ZW50U25pZmYgPT0gU25pZmZDb250ZW50KTsKKworICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAg
ICBpZiAobV9zYW1lT3JpZ2luUmVxdWVzdCkgeworICAgICAgICBib29sIHNraXBDYW5Mb2FkQ2hl
Y2sgPSBmYWxzZTsKKyAgICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgc2tpcENhbkxvYWRDaGVj
ayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fb3B0aW9ucy5jcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VF
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9vcHRpb25zLmZv
cmNlQ3Jvc3NPcmlnaW5QcmVmbGlnaHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVl
c3QocmVxdWVzdC5odHRwTWV0aG9kKCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkKKyAg
ICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9hY3R1YWxSZXF1ZXN0LnNldChuZXcgUmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QpKTsKKworICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6
c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9T
dHJpbmcoKSwgcmVxdWVzdC51cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHJlcXVl
c3QuaHR0cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgICAg
ICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1ha2VDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KHJlcXVlc3QpOworICAgIH0KK30KKwor
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vz
c1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVChp
c1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKTsKKworICAgIC8vIENyb3NzLW9yaWdpbiByZXF1ZXN0
cyBhcmUgb25seSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4gY2hl
Y2tpbmcgcmVzcG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBz
ZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBiZSBkZW5pZWQuCisgICAgaWYgKCFy
ZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKKyAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBwYXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBtb2Rp
Znkgc29tZSBkZXRhaWxzLgorICAgIFJlc291cmNlUmVxdWVzdCBjcm9zc09yaWdpblJlcXVlc3Qo
cmVxdWVzdCk7CisgICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Cisg
ICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSk7CisKKyAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxz
ZTsKKyAgICBsb2FkUmVxdWVzdChjcm9zc09yaWdpblJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2sp
OworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0KHJlcXVlc3QudXJsKCkpOwor
ICAgIHByZWZsaWdodFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKyAgICBwcmVmbGlnaHRS
ZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSk7CisgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJPUFRJT05TIik7Cisg
ICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJl
cXVlc3QtTWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOworCisgICAgY29uc3QgSFRUUEhl
YWRlck1hcCYgcmVxdWVzdEhlYWRlckZpZWxkcyA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygp
OworCisgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgeworICAgICAgICBW
ZWN0b3I8VUNoYXI+IGhlYWRlckJ1ZmZlcjsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7CisgICAgICAgIGFwcGVu
ZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgICsraXQ7CisKKyAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlckZpZWxkcy5lbmQo
KTsKKyAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaGVhZGVy
QnVmZmVyLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcp
OworICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAg
fQorCisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3Mt
Q29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1ZmZlcikpOwor
ICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMocmVxdWVzdEhlYWRl
ckZpZWxkcyk7CisgICAgfQorCisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gZmFsc2U7Cisg
ICAgbG9hZFJlcXVlc3QocHJlZmxpZ2h0UmVxdWVzdCwgc2tpcENhbkxvYWRDaGVjayk7CiB9CiAK
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCkBA
IC0xMjMsNyArMTY2LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5k
UgogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVjdCBj
b3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgotICAgIGlmIChtX2RlbnlD
cm9zc09yaWdpblJlZGlyZWN0ICYmICFtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CisgICAgaWYgKCFtX29wdGlvbnMuYWxsb3dDcm9zc09y
aWdpblJlZGlyZWN0ICYmICFtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0
KHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI+IHByb3RlY3QodGhpcyk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVj
aygpOwogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CkBAIC0xNDMsNyArMTg2
LDMxIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXYKICAgICBBU1NF
UlQobV9jbGllbnQpOwogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2Fk
ZXIpOwogCi0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAg
aWYgKG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xD
aGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCkpKSB7CisgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdChuZXcgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0obV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpKTsKKyAg
ICAgICAgaWYgKCFwcmVmbGlnaHRSZXN1bHQtPnBhcnNlKHJlc3BvbnNlKQorICAgICAgICAgICAg
fHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1
ZXN0LT5odHRwTWV0aG9kKCkpCisgICAgICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxv
d3NDcm9zc09yaWdpbkhlYWRlcnMobV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KSB7CisgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpz
aGFyZWQoKS5hcHBlbmRFbnRyeShtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKKyAgICAg
ICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMu
YWxsb3dDcmVkZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIH0KIH0KIAogdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKQEAgLTE1OCw3ICsy
MjUsMTYgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaAogewogICAg
IEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAg
bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobG9hZGVyLT5pZGVudGlmaWVyKCkpOworICAgIGRp
ZEZpbmlzaExvYWRpbmcobG9hZGVyLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpCit7CisgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICBBU1NFUlQoIW1fc2Ft
ZU9yaWdpblJlcXVlc3QpOworICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQogCiB2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTE3NCw3ICsyNTAsNyBAQCBi
b29sIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkCiB7CiAgICAgQVNTRVJUX1VO
VVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CiAKLSAgICBpZiAoIW1fYWxsb3dTdG9y
ZWRDcmVkZW50aWFscykgeworICAgIGlmICghbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpIHsK
ICAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPSBmYWxzZTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMjAwLDQgKzI3Niw2MSBAQCB2b2lkIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6cmVjZWl2ZWRDCiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNhbmNlbGxhdGlvbihjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkpOwogfQogCit2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0U3VjY2VzcygpCit7CisgICAgT3du
UHRyPFJlc291cmNlUmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKKyAgICBhY3R1YWxSZXF1ZXN0LnN3
YXAobV9hY3R1YWxSZXF1ZXN0KTsKKworICAgIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IHRydWU7
ICAvLyBvayB0byBza2lwIGxvYWQgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0
aGUgcHJlZmxpZ2h0IHJlcXVlc3QKKyAgICBsb2FkUmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgc2tp
cENhbkxvYWRDaGVjayk7Cit9CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVm
bGlnaHRGYWlsdXJlKCkKK3sKKyAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKCkp
OworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNraXBDYW5Mb2FkQ2hlY2spCit7CisgICAg
aWYgKG1fYXN5bmMpIHsKKyAgICAgICAgLy8gRG9uJ3Qgc25pZmYgY29udGVudCBvciBzZW5kIGxv
YWQgY2FsbGJhY2tzIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCisgICAgICAgIGJvb2wgc2Vu
ZExvYWRDYWxsYmFja3MgPSBtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgJiYgIW1fYWN0dWFs
UmVxdWVzdDsKKyAgICAgICAgYm9vbCBzbmlmZkNvbnRlbnQgPSBtX29wdGlvbnMuc25pZmZDb250
ZW50ICYmICFtX2FjdHVhbFJlcXVlc3Q7CisgICAgICAgIG1fbG9hZGVyID0gU3VicmVzb3VyY2VM
b2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBza2lwQ2Fu
TG9hZENoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucy5zbmlm
ZkNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMuCisgICAg
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBSZXNvdXJjZUVycm9yIGVycm9y
OworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7CisgICAg
aWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3VtZW50
LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKworICAgIC8vIE5vIGV4
Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIy
OTg+LgorICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3
YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCisgICAgaWYgKCFlcnJvci5pc051bGwoKSAm
JiAhcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgPD0gMCkgeworICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBhbG9uZyB3aXRoIHRoZSBv
bmUgaW4gd2lsbFNlbmRSZXF1ZXN0IGlzIHNwZWNpZmljIHRvIHhociBhbmQKKyAgICAvLyBzaG91
bGQgYmUgbWFkZSBtb3JlIGdlbmVyaWMuCisgICAgaWYgKG1fc2FtZU9yaWdpblJlcXVlc3QgJiYg
IW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkp
KSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKKwor
ICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0
YSgpKTsKKyAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisgICAg
ZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisKKyAgICBkaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNDcwNzQpCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00NCw4ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBw
cml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50ICB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIFN0b3JlZENyZWRlbnRpYWxz
KTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBj
cmVhdGUoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywg
Q3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUo
RG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgdmlydHVhbCB+RG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
OwpAQCAtNTgsNyArNTksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVyZWZUaHJlYWRhYmxlTG9hZGVyKCkgeyBkZXJlZigpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7
CisgICAgICAgIGVudW0gQmxvY2tpbmdCZWhhdmlvciB7CisgICAgICAgICAgICBMb2FkU3luY2hy
b25vdXNseSwKKyAgICAgICAgICAgIExvYWRBc3luY2hyb25vdXNseQorICAgICAgICB9OworCisg
ICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKTsKKwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlcios
IHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpOwogCkBAIC03MSwxMiArNzgsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKIAorICAgICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBtYWtlU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCk7CisgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGln
aHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKKyAgICAgICAgdm9pZCBwcmVmbGln
aHRTdWNjZXNzKCk7CisgICAgICAgIHZvaWQgcHJlZmxpZ2h0RmFpbHVyZSgpOworCisgICAgICAg
IHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBza2lwQ2FuTG9h
ZENoZWNrKTsKKwogICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOwog
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1l
bnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwor
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgICAgIGJvb2wg
bV9zYW1lT3JpZ2luUmVxdWVzdDsKLSAgICAgICAgYm9vbCBtX2RlbnlDcm9zc09yaWdpblJlZGly
ZWN0OworICAgICAgICBib29sIG1fYXN5bmM7CisgICAgICAgIE93blB0cjxSZXNvdXJjZVJlcXVl
c3Q+IG1fYWN0dWFsUmVxdWVzdDsgIC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29udHJvbCBw
cmVmbGlnaHQgY2hlY2tzCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDMzICs0
MCwzMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8VGhyZWFkYWJsZUxv
YWRlcj4gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRlbnRTbmlm
ZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDcm9z
c09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpIAorUGFzc1Jl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRp
b25zJiBvcHRpb25zKSAKIHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBBU1NFUlQoY29udGV4
dCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpCi0gICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBjbGllbnQsIFdvcmtlclJ1bkxvb3A6
OmRlZmF1bHRNb2RlKCksIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwg
c3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBy
ZXR1cm4gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KSwgY2xpZW50LCBXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpLCBy
ZXF1ZXN0LCBvcHRpb25zKTsKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAogICAgIEFTU0VS
VChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQsIHJl
cXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMs
IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQs
IHJlcXVlc3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQs
IFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQordm9pZCBUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwgc3RvcmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09y
aWdpblJlZGlyZWN0KTsKKyAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIHJl
cXVlc3QsIGNsaWVudCwgb3B0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCiAKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsK
LSAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBzdG9yZWRD
cmVkZW50aWFscyk7CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIHJlcXVlc3QsIGNs
aWVudCwgb3B0aW9ucyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9UaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS9sb2FkZXIv
VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBj
bGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OwogCi0gICAgZW51bSBMb2FkQ2FsbGJhY2tzIHsK
LSAgICAgICAgU2VuZExvYWRDYWxsYmFja3MsCi0gICAgICAgIERvTm90U2VuZExvYWRDYWxsYmFj
a3MKLSAgICB9OwotCi0gICAgZW51bSBDb250ZW50U25pZmYgewotICAgICAgICBTbmlmZkNvbnRl
bnQsCi0gICAgICAgIERvTm90U25pZmZDb250ZW50Ci0gICAgfTsKLQogICAgIGVudW0gU3RvcmVk
Q3JlZGVudGlhbHMgewogICAgICAgICBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAogICAgICAgICBE
b05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMKQEAgLTYyLDEzICs1MiwyMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIERlbnlDcm9zc09yaWdpblJlZGlyZWN0LAogICAgICAgICBBbGxv
d0Nyb3NzT3JpZ2luUmVkaXJlY3QKICAgICB9OworICAgIAorICAgIHN0cnVjdCBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyB7CisgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucygpIDogc2VuZExv
YWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBjcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2woZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgZm9yY2VDcm9zc09yaWdp
blByZWZsaWdodChmYWxzZSksIGFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdChmYWxzZSkgeyB9Cisg
ICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzOworICAgICAgYm9vbCBzbmlmZkNvbnRlbnQ7Cisg
ICAgICBib29sIGNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbDsKKyAgICAgIGJvb2wgYWxsb3dDcmVk
ZW50aWFsczsKKyAgICAgIGJvb2wgZm9yY2VDcm9zc09yaWdpblByZWZsaWdodDsKKyAgICAgIGJv
b2wgYWxsb3dDcm9zc09yaWdpblJlZGlyZWN0OworICAgIH07CiAKICAgICAvLyBVc2VmdWwgZm9y
IGRvaW5nIGxvYWRlciBvcGVyYXRpb25zIGZyb20gYW55IHRocmVhZCAobm90IHRocmVhZHNhZmUs
IAogICAgIC8vIGp1c3QgYWJsZSB0byBydW4gb24gdGhyZWFkcyBvdGhlciB0aGFuIHRoZSBtYWlu
IHRocmVhZCkuCiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgU3RvcmVkQ3JlZGVudGlhbHMpOwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBM
b2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKICAgICAgICAgdm9pZCByZWYoKSB7IHJlZlRocmVh
ZGFibGVMb2FkZXIoKTsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHlNb2RlW10gPSAibG9hZFJlc291cmNlU3luY2hyb25vdXNseU1vZGUiOwogCi1Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQqIHdvcmtl
ckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0
YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNh
bGxiYWNrc1NldHRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kpCitXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fd29y
a2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV93b3JrZXJDbGllbnRXcmFwcGVyKFRo
cmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpjcmVhdGUoY2xpZW50KSkKLSAgICAsIG1fYnJp
ZGdlKCoobmV3IE1haW5UaHJlYWRCcmlkZ2UobV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtl
ckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpLCB0YXNrTW9kZSwgcmVxdWVz
dCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSkpKQorICAgICwgbV9icmlkZ2UoKihuZXcgTWFpblRocmVh
ZEJyaWRnZShtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCkt
PndvcmtlckxvYWRlclByb3h5KCksIHRhc2tNb2RlLCByZXF1ZXN0LCBvcHRpb25zKSkpCiB7CiB9
CiAKQEAgLTY2LDcgKzY1LDcgQEAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6fldvcmtlclRocmVh
ZGFibAogICAgIG1fYnJpZGdlLmRlc3Ryb3koKTsKIH0KIAotdm9pZCBXb3JrZXJUaHJlYWRhYmxl
TG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NP
cmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQordm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykKIHsKICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+
dGhyZWFkKCktPnJ1bkxvb3AoKTsKIApAQCAtNzQsOSArNzMsNyBAQCB2b2lkIFdvcmtlclRocmVh
ZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjCiAgICAgU3RyaW5nIG1vZGUgPSBsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5TW9kZTsKICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29w
LmNyZWF0ZVVuaXF1ZUlkKCkpKTsKIAotICAgIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYgPSBy
ZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgPyBTbmlmZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29u
dGVudDsKLSAgICBSZWZQdHI8V29ya2VyVGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtlckNvbnRleHQsICZjbGllbnQsIG1vZGUsIHJl
cXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVu
dGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOwotCisgICAgUmVmUHRyPFdvcmtlclRo
cmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSh3
b3JrZXJDb250ZXh0LCAmY2xpZW50LCBtb2RlLCByZXF1ZXN0LCBvcHRpb25zKTsKICAgICBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsK
ICAgICB3aGlsZSAoIWxvYWRlci0+ZG9uZSgpICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJt
aW5hdGVkKQogICAgICAgICByZXN1bHQgPSBydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0
LCBtb2RlKTsKQEAgLTkxLDIxICs4OCwyMCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
OmNhbmNlbCgpCiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
Ok1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBl
cj4gd29ya2VyQ2xpZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBj
b25zdCBTdHJpbmcmIHRhc2tNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykK
ICAgICA6IG1fd29ya2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICwg
bV9sb2FkZXJQcm94eShsb2FkZXJQcm94eSkKICAgICAsIG1fdGFza01vZGUodGFza01vZGUuY29w
eSgpKQogewogICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOwotICAgIG1f
bG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJl
YWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIsIHRoaXMsIHJlcXVlc3QsIGNhbGxiYWNr
c1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyLCB0
aGlzLCByZXF1ZXN0LCBvcHRpb25zKSk7CiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1h
aW5UaHJlYWRCcmlkZ2U6On5NYWluVGhyZWFkQnJpZGdlKCkKIHsKIH0KIAotdm9pZCBXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQ
dHIsIGF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEs
IExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK3ZvaWQgV29ya2VyVGhyZWFkYWJs
ZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNYWluVGhyZWFkQnJpZGdlKiB0aGlzUHRyLCBhdXRv
X3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhLCBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CkBAIC0xMTcsNyArMTEzLDcgQEAg
dm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgYSBzaXRlIHJlcXVlc3RzIGEgbG9jYWwgcmVzb3VyY2UsIHRoZW4gdGhpcyB3aWxsIHJl
dHVybiBhIG5vbi16ZXJvIHZhbHVlIGJ1dCB0aGUgc3luYyBwYXRoCiAgICAgLy8gd2lsbCByZXR1
cm4gYSAwIHZhbHVlLiAgRWl0aGVyIHRoaXMgc2hvdWxkIHJldHVybiAwIG9yIHRoZSBvdGhlciBj
b2RlIHBhdGggc2hvdWxkIGRvIGEgY2FsbGJhY2sgd2l0aAogICAgIC8vIGEgZmFpbHVyZS4KLSAg
ICB0aGlzUHRyLT5tX21haW5UaHJlYWRMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
Y29udGV4dCwgdGhpc1B0ciwgKnJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlm
Ziwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgIHRo
aXNQdHItPm1fbWFpblRocmVhZExvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250
ZXh0LCB0aGlzUHRyLCAqcmVxdWVzdCwgb3B0aW9ucyk7CiAgICAgQVNTRVJUKHRoaXNQdHItPm1f
bWFpblRocmVhZExvYWRlcik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVh
ZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmgJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV29ya2VyVGhyZWFkYWJsZUxvYWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVMb2FkZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxv
YWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQ
b2xpY3kpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
PiBjcmVhdGUoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZm
IGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0KiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRo
cmVhZGFibGVMb2FkZXI+IGNyZWF0ZShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMm
IG9wdGlvbnMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29y
a2VyVGhyZWFkYWJsZUxvYWRlcih3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCByZXF1
ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdvcmtlclRocmVhZGFibGVMb2FkZXIod29ya2VyQ29udGV4dCwgY2xpZW50LCB0YXNrTW9k
ZSwgcmVxdWVzdCwgb3B0aW9ucykpOwogICAgICAgICB9CiAKICAgICAgICAgfldvcmtlclRocmVh
ZGFibGVMb2FkZXIoKTsKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlIDogVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiAg
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIC8vIEFsbCBleGVjdXRlZCBvbiB0aGUgd29ya2Vy
IGNvbnRleHQncyB0aHJlYWQuCi0gICAgICAgICAgICBNYWluVGhyZWFkQnJpZGdlKFBhc3NSZWZQ
dHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+LCBXb3JrZXJMb2FkZXJQcm94eSYsIGNv
bnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRDYWxsYmFj
a3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQ
b2xpY3kpOworICAgICAgICAgICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFi
bGVMb2FkZXJDbGllbnRXcmFwcGVyPiwgV29ya2VyTG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcm
IHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyYpOwogICAgICAgICAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAgICAgICAgIHZvaWQg
ZGVzdHJveSgpOwogCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZERlc3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqKTsKICAgICAgICAgICAgIH5NYWluVGhyZWFkQnJpZGdl
KCk7CiAKLSAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDcmVhdGVMb2FkZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqLCBzdGQ6OmF1dG9fcHRyPENy
b3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4sIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAg
ICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIHN0ZDo6YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPiwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMpOwogICAgICAgICAgICAg
c3RhdGljIHZvaWQgbWFpblRocmVhZENhbmNlbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFp
blRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVu
c2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVz
VG9CZVNlbnQpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC0xMzMsNyArMTMzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgU3RyaW5nIG1fdGFza01vZGU7CiAgICAgICAgIH07CiAKLSAg
ICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdv
cmtlckNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNr
TW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmKTsKIAogICAgICAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0Owog
ICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IG1fd29ya2VyQ2xp
ZW50V3JhcHBlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHJldmlz
aW9uIDQ3MDc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTdHJpbmc7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAg
ICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YTsKKyAgICBzdHJ1Y3QgVGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaCB7CiAgICAgICAgIHR5cGVkZWYgVCBUeXBlOwpA
QCAtNjUsNiArNjYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgVCo+IDogcHVibGljIENy
b3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8VCo+IHsKICAgICB9OwogCisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucz4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucz4geworICAgIH07CisKICAgICAvLyBDdXN0b20gY29weSBtZXRob2RzLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFQ+ID4gPiB7CiAgICAgICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxUPiBUeXBlOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAJ
KHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDEyIEBAIHZvaWQgV29ya2VyU2NyaXB0TG9h
ZGVyOjpsb2FkU3luY2hyb25vdXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgKnJlcXVlc3QsICp0aGlzLCBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKworICAgIFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
ID0gdHJ1ZTsKKyAgICBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdCA9IGNyb3NzT3Jp
Z2luUmVkaXJlY3RQb2xpY3kgPyBBbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgOiBEZW55Q3Jvc3NP
cmlnaW5SZWRpcmVjdDsKKworICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpLCAqcmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOwogfQogICAgIAogdm9pZCBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIENyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVy
Q2xpZW50KiBjbGllbnQpCkBAIC03Miw3ICs3NywxMSBAQCB2b2lkIFdvcmtlclNjcmlwdExvYWRl
cjo6bG9hZEFzeW5jaHJvbm91CiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3RocmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgdGhpcywgKnJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3Ms
IERvTm90U25pZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJl
ZGlyZWN0UG9saWN5KTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAg
IG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CisgICAgb3B0aW9ucy5hbGxvd0Nyb3Nz
T3JpZ2luUmVkaXJlY3QgPSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5ID8gQWxsb3dDcm9zc09y
aWdpblJlZGlyZWN0IDogRGVueUNyb3NzT3JpZ2luUmVkaXJlY3Q7CisKKyAgICBtX3RocmVhZGFi
bGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgdGhpcywgKnJlcXVlc3QsIG9wdGlvbnMpOwogfQogCiBQYXNzT3duUHRyPFJlc291cmNlUmVx
dWVzdD4gV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDog
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNDcwNzQpCisrKyBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRl
ICJDYWNoZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuaCIKLSNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
LmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC05MywyNSArOTIsMjUgQEAgc3RhdGljIGJvb2wgaXNW
YWxpZFRva2VuKGNvbnN0IFN0cmluZyYgbgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAg
ICAgIFVDaGFyIGMgPSBuYW1lW2ldOwotICAgICAgICAKKwogICAgICAgICBpZiAoYyA+PSAxMjcg
fHwgYyA8PSAzMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAg
ICAgaWYgKGMgPT0gJygnIHx8IGMgPT0gJyknIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nIHx8IGMg
PT0gJ0AnIHx8CiAgICAgICAgICAgICBjID09ICcsJyB8fCBjID09ICc7JyB8fCBjID09ICc6JyB8
fCBjID09ICdcXCcgfHwgYyA9PSAnXCInIHx8CiAgICAgICAgICAgICBjID09ICcvJyB8fCBjID09
ICdbJyB8fCBjID09ICddJyB8fCBjID09ICc/JyB8fCBjID09ICc9JyB8fAogICAgICAgICAgICAg
YyA9PSAneycgfHwgYyA9PSAnfScpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCisKIHN0YXRpYyBib29sIGlzVmFsaWRI
ZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QgCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QKICAgICAvLyBmaWVsZC12YWx1ZSBpbiBzZWN0aW9u
IDQuMiBvZiBSRkMgMjYxNi4KLSAgICAgICAgCisKICAgICByZXR1cm4gIW5hbWUuY29udGFpbnMo
J1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7CiB9CiAKQEAgLTE0Myw5ICsxNDIsOSBAQCBY
TUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlCiAgICAgLCBtX3Jlc3BvbnNl
VGV4dCgiIikKICAgICAsIG1fY3JlYXRlZERvY3VtZW50KGZhbHNlKQogICAgICwgbV9lcnJvcihm
YWxzZSkKKyAgICAsIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCh0cnVlKQogICAgICwgbV91cGxvYWRD
b21wbGV0ZShmYWxzZSkKICAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3QodHJ1ZSkKLSAgICAsIG1f
aW5QcmVmbGlnaHQoZmFsc2UpCiAgICAgLCBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3QoZmFs
c2UpCiAgICAgLCBtX3JlY2VpdmVkTGVuZ3RoKDApCiAgICAgLCBtX2xhc3RTZW5kTGluZU51bWJl
cigwKQpAQCAtMjA3LDcgKzIwNiw3IEBAIERvY3VtZW50KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9u
c2VYTUwoKSAKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPndyaXRlKFN0cmluZyhtX3Jlc3Bv
bnNlVGV4dCkpOwogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+ZmluaXNoUGFyc2luZygpOwog
ICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+Y2xvc2UoKTsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICBpZiAoIW1fcmVzcG9uc2VYTUwtPndlbGxGb3JtZWQoKSkKICAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfQpAQCAtMjM2LDcgKzIzNSw3IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuZXIoY28KICAgICAgICAgZm9yIChMaXN0ZW5l
clZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3Rl
bmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKQogICAgICAgICAgICAg
aWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAorCiAgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7
CiAgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKICAg
ICB9CkBAIC0zMjIsMTAgKzMyMSwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0
IFN0cmluZyYgCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKKwogICAgIC8vIE1ldGhvZCBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUuIEJ1dCBz
aW5jZSBGaXJlZm94IHVwcGVyY2FzZXMgbWV0aG9kIG5hbWVzIGl0IGtub3dzLCB3ZSdsbCBkbyB0
aGUgc2FtZS4KICAgICBTdHJpbmcgbWV0aG9kVXBwZXIobWV0aG9kLnVwcGVyKCkpOwotICAgIAor
CiAgICAgaWYgKG1ldGhvZFVwcGVyID09ICJUUkFDRSIgfHwgbWV0aG9kVXBwZXIgPT0gIlRSQUNL
IiB8fCBtZXRob2RVcHBlciA9PSAiQ09OTkVDVCIpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9F
UlI7CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSw3ICszMzQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBpZiAobWV0aG9kVXBwZXIgPT0gIkNPUFki
IHx8IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhvZFVwcGVyID09ICJHRVQiIHx8IG1l
dGhvZFVwcGVyID09ICJIRUFEIgogICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8
IG1ldGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRo
b2RVcHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZFIgotICAgICAgICB8fCBt
ZXRob2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhv
ZFVwcGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0
aG9kVXBwZXIgPT0gIlBVVCIgCisgICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJPUFRJT05TIiB8
fCBtZXRob2RVcHBlciA9PSAiUE9TVCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BGSU5EIiB8fCBt
ZXRob2RVcHBlciA9PSAiUFJPUFBBVENIIiB8fCBtZXRob2RVcHBlciA9PSAiUFVUIgogICAgICAg
ICB8fCBtZXRob2RVcHBlciA9PSAiVU5MT0NLIikKICAgICAgICAgbV9tZXRob2QgPSBtZXRob2RV
cHBlcjsKICAgICBlbHNlCkBAIC0zNTcsNyArMzU2LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
b3Blbihjb25zdCBTdHJpbmcmIAogewogICAgIEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKHVybCk7
CiAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIodXNlcik7Ci0gICAgCisKICAgICBvcGVu
KG1ldGhvZCwgdXJsV2l0aENyZWRlbnRpYWxzLCBhc3luYywgZWMpOwogfQogCkBAIC0zNjYsNyAr
MzY1LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogICAgIEtV
UkwgdXJsV2l0aENyZWRlbnRpYWxzKHVybCk7CiAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVz
ZXIodXNlcik7CiAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFBhc3MocGFzc3dvcmQpOwotICAg
IAorCiAgICAgb3BlbihtZXRob2QsIHVybFdpdGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0K
IApAQCAtNDYzLDM0ICs0NjIsMjMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChGaWxlKiBi
b2R5LCBFeAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIC8vIFVwbG9hZCBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGRpc2Fs
bG93ZWQgZm9yIHNpbXBsZSBjcm9zcy1vcmlnaW4gcmVxdWVzdHMsIGJlY2F1c2UgUE9TVGluZyB0
byBhbiBVUkwgdGhhdCBkb2VzIG5vdAotICAgIC8vIHBlcm1pdCBjcm9zcyBvcmlnaW4gcmVxdWVz
dHMgc2hvdWxkIGxvb2sgZXhhY3RseSBsaWtlIFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBu
b3QgcmVzcG9uZCBhdCBhbGwuIElmIGEgbGlzdGVuZXIgZXhpc3RzCi0gICAgLy8gd2hlbiBjcmVh
dGluZyB0aGUgcmVxdWVzdCwgaXQgd2lsbCBmb3JjZSBwcmVmbGlnaHQuCisgICAgLy8gVGhlIHBy
ZXNlbmNlIG9mIHVwbG9hZCBldmVudCBsaXN0ZW5lcnMgZm9yY2VzIHVzIHRvIHVzZSBwcmVmbGln
aHRpbmcgYmVjYXVzZSBQT1NUaW5nIHRvIGFuIFVSTCB0aGF0IGRvZXMgbm90CisgICAgLy8gcGVy
bWl0IGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBzaG91bGQgbG9vayBleGFjdGx5IGxpa2UgUE9TVGlu
ZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdCByZXNwb25kIGF0IGFsbC4KICAgICAvLyBBbHNvLCBv
bmx5IGFzeW5jIHJlcXVlc3RzIHN1cHBvcnQgdXBsb2FkIHByb2dyZXNzIGV2ZW50cy4KLSAgICBt
X3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBmYWxzZTsKKyAgICBib29sIGZvcmNlUHJlZmxpZ2h0ID0g
ZmFsc2U7CiAgICAgaWYgKG1fYXN5bmMpIHsKICAgICAgICAgZGlzcGF0Y2hMb2FkU3RhcnRFdmVu
dCgpOwogICAgICAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9keSAmJiBtX3VwbG9hZCkgewotICAg
ICAgICAgICAgbV91cGxvYWRFdmVudHNBbGxvd2VkID0gbV91cGxvYWQtPmhhc0xpc3RlbmVycygp
OworICAgICAgICAgICAgZm9yY2VQcmVmbGlnaHQgPSBtX3VwbG9hZC0+aGFzTGlzdGVuZXJzKCk7
CiAgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hMb2FkU3RhcnRFdmVudCgpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgbV9zYW1lT3JpZ2luUmVxdWVzdCA9IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChtX3VybCk7CiAKLSAgICBpZiAo
IW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKLSAgICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVx
dWVzdChlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3VwbG9hZEV2ZW50c0Fs
bG93ZWQgPSB0cnVlOwotCi0gICAgbWFrZVNhbWVPcmlnaW5SZXF1ZXN0KGVjKTsKLX0KLQotdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6bWFrZVNhbWVPcmlnaW5SZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVChtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKKyAgICAvLyBXZSBhbHNvIHJl
bWVtYmVyIHdoZXRoZXIgdXBsb2FkIGV2ZW50cyBzaG91bGQgYmUgYWxsb3dlZCBmb3IgdGhpcyBy
ZXF1ZXN0IGluIGNhc2UgdGhlIHVwbG9hZCBsaXN0ZW5lcnMgYXJlCisgICAgLy8gYWRkZWQgYWZ0
ZXIgdGhlIHJlcXVlc3QgaXMgc3RhcnRlZC4KKyAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSAh
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1fcmVxdWVzdEhlYWRl
cnMpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91cmwpOwogICAgIHJlcXVlc3Qu
c2V0SFRUUE1ldGhvZChtX21ldGhvZCk7CkBAIC01MDQsMjAyICs0OTIsMjkgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6bWFrZVNhbWVPcmlnaW5SZXF1ZQogICAgIGlmIChtX3JlcXVlc3RIZWFkZXJz
LnNpemUoKSA+IDApCiAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVl
c3RIZWFkZXJzKTsKIAotICAgIGlmIChtX2FzeW5jKQotICAgICAgICBsb2FkUmVxdWVzdEFzeW5j
aHJvbm91c2x5KHJlcXVlc3QpOwotICAgIGVsc2UKLSAgICAgICAgbG9hZFJlcXVlc3RTeW5jaHJv
bm91c2x5KHJlcXVlc3QsIGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFrZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoIW1f
c2FtZU9yaWdpblJlcXVlc3QpOwotCi0gICAgaWYgKCFtX3VwbG9hZEV2ZW50c0FsbG93ZWQgJiYg
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1fcmVxdWVzdEhlYWRl
cnMpKQotICAgICAgICBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGVjKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0
KGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoaXNTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpKTsKKyAgICBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxs
YmFja3MgPSB0cnVlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAgb3B0
aW9ucy5jcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wgPSB0cnVlOworICAgIG9wdGlvbnMuYWxsb3dD
cmVkZW50aWFscyA9IG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHM7
CisgICAgb3B0aW9ucy5mb3JjZUNyb3NzT3JpZ2luUHJlZmxpZ2h0ID0gZm9yY2VQcmVmbGlnaHQ7
CisgICAgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgPSBmYWxzZTsKIAotICAgIC8v
IENyb3NzLW9yaWdpbiByZXF1ZXN0cyBhcmUgb25seSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3Vs
ZCBjYXRjaCB0aGlzIHdoZW4gY2hlY2tpbmcgcmVzcG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRo
ZXJlIGlzIG5vIHJlYXNvbiB0byBzZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBi
ZSBkZW5pZWQuCi0gICAgaWYgKCFtX3VybC5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7Ci0gICAg
ICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5FVFdPUktfRVJSOwotICAgICAgICBu
ZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEtVUkwgdXJsID0g
bV91cmw7Ci0gICAgdXJsLnNldFVzZXIoU3RyaW5nKCkpOwotICAgIHVybC5zZXRQYXNzKFN0cmlu
ZygpKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAgcmVxdWVzdC5z
ZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEFsbG93SFRUUENvb2tpZXMo
bV9pbmNsdWRlQ3JlZGVudGlhbHMpOwotICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwotCi0gICAg
aWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkKLSAgICAgICAgcmVxdWVzdC5hZGRIVFRQ
SGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwotCi0gICAgaWYgKG1fcmVxdWVzdEVudGl0
eUJvZHkpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJHRVQiKTsKLSAgICAgICAgQVNT
RVJUKG1fbWV0aG9kICE9ICJIRUFEIik7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkobV9y
ZXF1ZXN0RW50aXR5Qm9keS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIGlmIChtX2FzeW5jKQot
ICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVlc3QpOwotICAgIGVsc2UKLSAg
ICAgICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGVjKTsKLX0KLQotdm9pZCBY
TUxIdHRwUmVxdWVzdDo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQo
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgU3RyaW5nIG9yaWdpbiA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKLSAgICBLVVJMIHVybCA9
IG1fdXJsOwotICAgIHVybC5zZXRVc2VyKFN0cmluZygpKTsKLSAgICB1cmwuc2V0UGFzcyhTdHJp
bmcoKSk7Ci0KLSAgICBpZiAoIUNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJl
ZCgpLmNhblNraXBQcmVmbGlnaHQob3JpZ2luLCB1cmwsIG1faW5jbHVkZUNyZWRlbnRpYWxzLCBt
X21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykpIHsKLSAgICAgICAgbV9pblByZWZsaWdodCA9IHRy
dWU7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0KHVybCk7Ci0gICAg
ICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiT1BUSU9OUyIpOwotICAgICAgICBw
cmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiT3JpZ2luIiwgb3JpZ2luKTsKLSAg
ICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9s
LVJlcXVlc3QtTWV0aG9kIiwgbV9tZXRob2QpOwotCi0gICAgICAgIGlmIChtX3JlcXVlc3RIZWFk
ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gaGVhZGVyQnVmZmVy
OwotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlcXVl
c3RIZWFkZXJzLmJlZ2luKCk7Ci0gICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+
Zmlyc3QpOwotICAgICAgICAgICAgKytpdDsKLQotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SGVhZGVycy5lbmQoKTsKLSAgICAgICAgICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBoZWFkZXJCdWZmZXIu
YXBwZW5kKCcsJyk7Ci0gICAgICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcpOwot
ICAgICAgICAgICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1
ZmZlcikpOwotICAgICAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRz
KG1fcmVxdWVzdEhlYWRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fYXN5bmMpIHsK
LSAgICAgICAgICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgICAgICBs
b2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHByZWZsaWdodFJlcXVlc3QpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHBy
ZWZsaWdodFJlcXVlc3QsIGVjKTsKLSAgICAgICAgbV9pblByZWZsaWdodCA9IGZhbHNlOwotCi0g
ICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZW5k
IHRoZSBhY3R1YWwgcmVxdWVzdC4KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwot
ICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxv
d0hUVFBDb29raWVzKG1faW5jbHVkZUNyZWRlbnRpYWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBI
ZWFkZXJGaWVsZCgiT3JpZ2luIiwgb3JpZ2luKTsKLQotICAgIGlmIChtX3JlcXVlc3RIZWFkZXJz
LnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVl
c3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3JlcXVlc3RFbnRpdHlCb2R5KSB7Ci0gICAgICAgIEFT
U0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiSEVB
RCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KG1fcmVxdWVzdEVudGl0eUJvZHkucmVs
ZWFzZSgpKTsKLSAgICB9CisgICAgbV9leGNlcHRpb25Db2RlID0gMDsKKyAgICBtX2Vycm9yID0g
ZmFsc2U7CiAKICAgICBpZiAobV9hc3luYykgewotICAgICAgICBtX3VwbG9hZEV2ZW50c0FsbG93
ZWQgPSB0cnVlOwotICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVlc3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHJl
cXVlc3QsIGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6aGFuZGxlQXN5bmNocm9ub3Vz
UHJlZmxpZ2h0UmVzdWx0KCkKLXsKLSAgICBBU1NFUlQobV9pblByZWZsaWdodCk7Ci0gICAgQVNT
RVJUKG1fYXN5bmMpOwotCi0gICAgbV9pblByZWZsaWdodCA9IGZhbHNlOwotCi0gICAgS1VSTCB1
cmwgPSBtX3VybDsKLSAgICB1cmwuc2V0VXNlcihTdHJpbmcoKSk7Ci0gICAgdXJsLnNldFBhc3Mo
U3RyaW5nKCkpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwotICAgIHJlcXVlc3Quc2V0QWxsb3dIVFRQQ29v
a2llcyhtX2luY2x1ZGVDcmVkZW50aWFscyk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQT3JpZ2luKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0K
LSAgICBpZiAobV9yZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKQotICAgICAgICByZXF1ZXN0LmFk
ZEhUVFBIZWFkZXJGaWVsZHMobV9yZXF1ZXN0SGVhZGVycyk7Ci0KLSAgICBpZiAobV9yZXF1ZXN0
RW50aXR5Qm9keSkgewotICAgICAgICBBU1NFUlQobV9tZXRob2QgIT0gIkdFVCIpOwotICAgICAg
ICBBU1NFUlQobV9tZXRob2QgIT0gIkhFQUQiKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9k
eShtX3JlcXVlc3RFbnRpdHlCb2R5LnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgbV91cGxvYWRF
dmVudHNBbGxvd2VkID0gdHJ1ZTsKLSAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVl
c3QpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHko
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NF
UlQoIW1fYXN5bmMpOwotCi0gICAgbV9sb2FkZXIgPSAwOwotICAgIG1fZXhjZXB0aW9uQ29kZSA9
IDA7Ci0gICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSAobV9zYW1lT3Jp
Z2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgICAgICByZXF1ZXN0LnNldFJl
cG9ydFVwbG9hZFByb2dyZXNzKHRydWUpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7CisgICAgICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgfSBlbHNlCisg
ICAgICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCByZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7CiAKLSAgICBUaHJl
YWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgcmVxdWVzdCwgKnRoaXMsIHN0b3JlZENyZWRlbnRpYWxzKTsKICAgICBpZiAoIW1f
ZXhjZXB0aW9uQ29kZSAmJiBtX2Vycm9yKQogICAgICAgICBtX2V4Y2VwdGlvbkNvZGUgPSBYTUxI
dHRwUmVxdWVzdEV4Y2VwdGlvbjo6TkVUV09SS19FUlI7CiAgICAgZWMgPSBtX2V4Y2VwdGlvbkNv
ZGU7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHko
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIEFTU0VSVChtX2FzeW5jKTsKLSAgICBt
X2V4Y2VwdGlvbkNvZGUgPSAwOwotICAgIC8vIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgY2Fu
IHJldHVybiBudWxsIGhlcmUsIGZvciBleGFtcGxlIGlmIHdlJ3JlIG5vIGxvbmdlciBhdHRhY2hl
ZCB0byBhIHBhZ2UuCi0gICAgLy8gVGhpcyBpcyB0cnVlIHdoaWxlIHJ1bm5pbmcgb251bmxvYWQg
aGFuZGxlcnMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBzZW5kIFhNTEh0
dHBSZXF1ZXN0cyBmcm9tIG9udW5sb2FkLCA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA5MDQ+LgotICAgIC8vIEZJWE1FOiBNYXliZSBjcmVhdGUgY2FuIHJldHVybiBu
dWxsIGZvciBvdGhlciByZWFzb25zIHRvbz8KLSAgICBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrcyA9
IG1faW5QcmVmbGlnaHQgPyBEb05vdFNlbmRMb2FkQ2FsbGJhY2tzIDogU2VuZExvYWRDYWxsYmFj
a3M7Ci0gICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSAobV9zYW1lT3Jp
Z2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgaWYgKG1fdXBsb2FkKQot
ICAgICAgICByZXF1ZXN0LnNldFJlcG9ydFVwbG9hZFByb2dyZXNzKHRydWUpOwotCi0gICAgbV9s
b2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCB0aGlzLCByZXF1ZXN0LCBjYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBzdG9yZWRDcmVk
ZW50aWFscywgRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QpOwotCi0gICAgaWYgKG1fbG9hZGVyKSB7
Ci0gICAgICAgIC8vIE5laXRoZXIgdGhpcyBvYmplY3Qgbm9yIHRoZSBKYXZhU2NyaXB0IHdyYXBw
ZXIgc2hvdWxkIGJlIGRlbGV0ZWQgd2hpbGUKLSAgICAgICAgLy8gYSByZXF1ZXN0IGlzIGluIHBy
b2dyZXNzIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0ZW5lcnMgYWxpdmUsCi0gICAg
ICAgIC8vIGFuZCB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBKYXZhU2NyaXB0IHdyYXBwZXIu
Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEZvciBub3cgd2Ugc2hvdWxkIG9ubHkgYmFsYW5jZSB0aGUgbm9uQ2FjaGVkIHJlcXVlc3QgY291
bnQgZm9yIG1haW4tdGhyZWFkIFhIUnMgYW5kIG5vdAotICAgICAgICAvLyBXb3JrZXIgWEhScywg
YXMgdGhlIENhY2hlIGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGJl
Y29tZSBpcnJlbGV2YW50IGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzE2NSBpcyByZXNvbHZlZC4KLSAgICAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3Qp
OwotICAgICAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPm5vbkNhY2hlUmVxdWVzdEluRmxpZ2h0
KG1fdXJsKTsKLSAgICAgICAgICAgIG1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkKIHsK
ICAgICAvLyBpbnRlcm5hbEFib3J0KCkgY2FsbHMgZHJvcFByb3RlY3Rpb24oKSwgd2hpY2ggbWF5
IHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlLgpAQCAtNzExLDcgKzUyNiw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmFib3J0KCkKIAogICAgIC8vIENsZWFyIGhlYWRlcnMgYXMgcmVxdWlyZWQg
YnkgdGhlIHNwZWMKICAgICBtX3JlcXVlc3RIZWFkZXJzLmNsZWFyKCk7Ci0gICAgCisKICAgICBp
ZiAoKG1fc3RhdGUgPD0gT1BFTkVEICYmICFzZW5kRmxhZykgfHwgbV9zdGF0ZSA9PSBET05FKQog
ICAgICAgICBtX3N0YXRlID0gVU5TRU5UOwogICAgIGVsc2UgewpAQCAtNzk0LDcgKzYwOSw3IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0RXJyb3IoKQogICAgIH0KIH0KIAotdm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAgICAgICAgCit2b2lkIFhNTEh0dHBSZXF1ZXN0
Ojpkcm9wUHJvdGVjdGlvbigpCiB7CiAjaWYgVVNFKEpTQykKICAgICAvLyBUaGUgWEhSIG9iamVj
dCBpdHNlbGYgaG9sZHMgb24gdG8gdGhlIHJlc3BvbnNlVGV4dCwgYW5kCkBAIC04NTQsNyArNjY5
LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjbwogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHBhaXI8SFRUUEhlYWRlck1hcDo6
aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVl
KTsgCisgICAgcGFpcjxIVFRQSGVhZGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9y
ZXF1ZXN0SGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkK
ICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgKz0gIiwgIiArIHZhbHVlOwogfQpAQCAtOTM5
LDcgKzc1NCw3IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VNSU1FVHlwZSgKICAg
ICB9CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgbWltZVR5cGUgPSAidGV4
dC94bWwiOwotICAgIAorCiAgICAgcmV0dXJuIG1pbWVUeXBlOwogfQogCkBAIC05ODEsNyArNzk2
LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbChjb25zdCBSZXNvdQogICAgICAgICBj
YWNoZSgpLT5sb2FkZXIoKS0+bm9uQ2FjaGVSZXF1ZXN0Q29tcGxldGUobV91cmwpOwogICAgICAg
ICBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3QgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBpbiBhbiBlcnJvciBzdGF0ZSwgZm9yIGluc3RhbmNlIHdl
IGNhbGxlZCBhYm9ydCgpLCBiYWlsIG91dCBlYXJseS4KICAgICBpZiAobV9lcnJvcikKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTAxMSwxMSArODI2LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
RmluaXNoTG9hZGluZyh1bgogICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9pblByZWZsaWdodCkgewotICAgICAgICBkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAobV9zdGF0ZSA8IEhFQURFUlNf
UkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0YXRlKEhFQURFUlNfUkVDRUlWRUQpOwogCkBAIC0x
MDM1LDE5ICs4NDUsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKHVu
CiAgICAgICAgIGRyb3BQcm90ZWN0aW9uKCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
ZEZpbmlzaExvYWRpbmdQcmVmbGlnaHQoKQotewotICAgIEFTU0VSVChtX2luUHJlZmxpZ2h0KTsK
LSAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOwotCi0gICAgLy8gRklYTUU6IHRoaXMg
Y2FuIHByb2JhYmx5IGJlIG1vdmVkIHRvIGRpZFJlY2VpdmVSZXNwb25zZVByZWZsaWdodC4KLSAg
ICBpZiAobV9hc3luYykKLSAgICAgICAgaGFuZGxlQXN5bmNocm9ub3VzUHJlZmxpZ2h0UmVzdWx0
KCk7Ci0KLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOwotfQotCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQog
ewogICAgIGlmICghbV91cGxvYWQpCkBAIC0xMDY1LDQ1ICs4NjIsMTIgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZGlkU2VuZERhdGEodW5zaWduZQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAg
aWYgKG1faW5QcmVmbGlnaHQpIHsKLSAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0
KHJlc3BvbnNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zYW1lT3Jp
Z2luUmVxdWVzdCkgewotICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNw
b25zZSwgbV9pbmNsdWRlQ3JlZGVudGlhbHMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtFcnJvcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNl
OwogICAgIG1fcmVzcG9uc2VFbmNvZGluZyA9IGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZSht
X21pbWVUeXBlT3ZlcnJpZGUpOwogICAgIGlmIChtX3Jlc3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgp
KQogICAgICAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1l
KCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVSZXNwb25zZVByZWZsaWdo
dChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBBU1NFUlQobV9pblBy
ZWZsaWdodCk7Ci0gICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKLQotICAgIGlmICgh
cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX2luY2x1ZGVDcmVkZW50aWFscywg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpKSkgewotICAgICAgICBu
ZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93blB0cjxDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4gcHJlZmxpZ2h0UmVzdWx0KG5ldyBDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbShtX2luY2x1ZGVDcmVkZW50aWFscykpOwot
ICAgIGlmICghcHJlZmxpZ2h0UmVzdWx0LT5wYXJzZShyZXNwb25zZSkKLSAgICAgICAgfHwgIXBy
ZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9tZXRob2QpCi0gICAgICAg
IHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhtX3JlcXVlc3RI
ZWFkZXJzKSkgewotICAgICAgICBuZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFwcGVu
ZEVudHJ5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSwgbV91cmwsIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkpOwotfQotCiB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgZmFpbHVyZVJlc3BvbnNlKQogewogICAgIG1fcmVzcG9uc2UgPSBmYWls
dXJlUmVzcG9uc2U7CkBAIC0xMTExLDEyICs4NzUsMTIgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZUF1dGhlbnRpYwogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQogewotICAgIGlmIChtX2luUHJlZmxpZ2h0IHx8
IG1fZXJyb3IpCisgICAgaWYgKG1fZXJyb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X3N0YXRlIDwgSEVBREVSU19SRUNFSVZFRCkKICAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVSU19S
RUNFSVZFRCk7Ci0gIAorCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgaWYgKCFtX3Jl
c3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9yZXNwb25zZUVuY29kaW5nKTsK
QEAgLTEyMTAsNyArOTc0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0Y2hMb2FkU3Rh
cnRFdgogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQobG9uZyBs
b25nIGV4cGVjdGVkTGVuZ3RoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50KG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkucHJvZ3Jlc3NF
dmVudCwgZXhwZWN0ZWRMZW5ndGggJiYgbV9yZWNlaXZlZExlbmd0aCA8PSBleHBlY3RlZExlbmd0
aCwgCisgICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vblByb2dyZXNz
TGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBleHBlY3RlZExlbmd0
aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2VpdmVk
TGVuZ3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7CiB9CiAKQEAg
LTEyMzUsNCArOTk5LDQgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogWE1MSHR0cFJlcXVlc3Q6
OgogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
IH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNDcwNzQpCisrKyBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
LSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCkBAIC0xMzUs
MTAgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENo
ZWNrKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxh
dGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAgICAvLyBTcGVjaWFsIHZlcnNpb25z
IGZvciB0aGUgcHJlZmxpZ2h0Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2VQcmVmbGlnaHQo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ1ByZWZs
aWdodCgpOwotCiAgICAgdm9pZCB1cGRhdGVBbmREaXNwYXRjaE9uUHJvZ3Jlc3ModW5zaWduZWQg
aW50IGxlbik7CiAKICAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwpAQCAtMTU5
LDE2ICsxNTUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgIHZvaWQgbWFrZVNhbWVPcmlnaW5SZXF1ZXN0KEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgdm9pZCBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxp
Z2h0KEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGhhbmRsZUFzeW5jaHJvbm91c1ByZWZsaWdo
dFJlc3VsdCgpOwotCi0gICAgdm9pZCBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkoUmVzb3VyY2VS
ZXF1ZXN0JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgbG9hZFJlcXVlc3RBc3luY2hyb25v
dXNseShSZXNvdXJjZVJlcXVlc3QmKTsKLQogICAgIHZvaWQgZ2VuZXJpY0Vycm9yKCk7CiAgICAg
dm9pZCBuZXR3b3JrRXJyb3IoKTsKICAgICB2b2lkIGFib3J0RXJyb3IoKTsKQEAgLTIyMywxMyAr
MjA5LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VwbG9hZENvbXBsZXRlOwogCiAgICAgYm9v
bCBtX3NhbWVPcmlnaW5SZXF1ZXN0OwotICAgIGJvb2wgbV9hbGxvd0FjY2VzczsKLSAgICBib29s
IG1faW5QcmVmbGlnaHQ7CiAgICAgYm9vbCBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3Q7CiAK
ICAgICAvLyBVc2VkIGZvciBvbnByb2dyZXNzIHRyYWNraW5nCiAgICAgbG9uZyBsb25nIG1fcmVj
ZWl2ZWRMZW5ndGg7Ci0gICAgCisKICAgICB1bnNpZ25lZCBtX2xhc3RTZW5kTGluZU51bWJlcjsK
ICAgICBTdHJpbmcgbV9sYXN0U2VuZFVSTDsKICAgICBFeGNlcHRpb25Db2RlIG1fZXhjZXB0aW9u
Q29kZTsK
</data>
<flag name="review"
          id="18840"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="18773"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34621</attachid>
            <date>2009-08-11 17:46:48 -0700</date>
            <delta_ts>2009-08-11 20:08:10 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>bug28134.patch</filename>
            <type>text/plain</type>
            <size>56721</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzA3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMTEgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQlVH
IDI4MTM0OiBNb3ZlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgQWNjZXNzIENvbnRyb2wgZnJvbSBY
TUxIdHRwUmVxdWVzdCB0byBUaHJlYWRhYmxlRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzNAorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhZGRlZCBzaW5jZSBBY2Nlc3MgQ29udHJvbCB3YXMgYWxyZWFkeSB3ZWxsIHRlc3Rl
ZCBhbmQgdGhpcyBpcyBhIHB1cmUgcmVmYWN0b3IuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogTW92ZSBhIGxvdCBvZiB0aGUgYWNjZXNzIGNvbnRyb2wg
Y29kZSBmcm9tIFhIUiBpbiwgcHJlc2VydmluZyBpdHMKKyAgICAgICAgYmFzaWMgc3RyYXRlZ3ku
IEFsc28sIG1vZGlmeSB0aGUgc3luY2hyb25vdXMgcGF0aCB0byBub3QgYmUgYSBzcGVjaWFsIGNh
c2UsIGJ1dCByZXVzZSBtb3JlIG9mIHRoZSBhc3luYworICAgICAgICBwYXRoLgorCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBHbyB0aHJvdWdoIHRoZSBhc3luYyBwYXRoIGFuZCBwYXNzIGFkZGl0aW9uYWwgZmxh
Z3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6
IEdyb3VwIGVudW0gcGFyYW1zIGludG8gYW4gb3B0aW9ucyBzdHJ1Y3QuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KTogQnJvdWdodCBtb3N0bHkgZnJvbSBYSFIu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6IEhhbmRsZSBwcmVm
bGlnaHQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6IFByZWZsaWdodCBoYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6IENv
bW1vbiByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhc3luYy9zeW5jLgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDogR3JvdXAgZW51bSBwYXJhbXMgaW50
byBhbiBvcHRpb25zIHN0cnVjdC4KKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6VGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6RGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBBbGxv
dyBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB0byBiZSBjb3BpZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3JvdXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3Jv
dXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hy
b25vdXNseSk6IE1vcmUgZW51bS0+c3RydWN0IGdyb3VwaW5nLgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6IFJlbW92ZSBhbGwgdGhlIGFjY2VzcyBjb250cm9sIGNvZGUgYW5kIHNv
bWUgc3VwcG9ydGluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpY
TUxIdHRwUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZVJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuaDogRGl0dG8uCisKIDIwMDktMDgtMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGlu
Z0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gVHJlYXQuCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ3
MDc0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogI2luY2x1ZGUgIkRvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKKyNpbmNs
dWRlICJDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCIKKyNpbmNsdWRlICJDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC00Myw2MSAr
NDQsMTAzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNs
aWVudCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMpCit2b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBib29sIHNhbWVPcmlnaW5SZXF1ZXN0ID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAg
ICBSZXNvdXJjZUVycm9yIGVycm9yOwotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0g
ICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBsb25nPjo6bWF4KCk7Ci0gICAgaWYgKGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBpZGVu
dGlmaWVyID0gZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEp
OwotCi0gICAgLy8gTm8gZXhjZXB0aW9uIGZvciBmaWxlOi8vLyByZXNvdXJjZXMsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNDk2MjI5OD4uCi0gICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhbiBIVFRQIHJl
c3BvbnNlLCB0aGVuIGl0IHdhc24ndCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFjdC4KLSAgICBpZiAo
IWVycm9yLmlzTnVsbCgpICYmICFyZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgJiYgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAwKSB7Ci0gICAgICAgIGNsaWVudC5kaWRGYWlsKGVycm9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGFs
b25nIHdpdGggdGhlIG9uZSBpbiB3aWxsU2VuZFJlcXVlc3QgaXMgc3BlY2lmaWMgdG8geGhyIGFu
ZAotICAgIC8vIHNob3VsZCBiZSBtYWRlIG1vcmUgZ2VuZXJpYy4KLSAgICBpZiAoc2FtZU9yaWdp
blJlcXVlc3QgJiYgIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlc3Bv
bnNlLnVybCgpKSkgewotICAgICAgICBjbGllbnQuZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UocmVz
cG9uc2UpOwotCi0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6
ZSgpKTsKLSAgICBjbGllbnQuZGlkUmVjZWl2ZURhdGEoYnl0ZXMsIGxlbik7Ci0KLSAgICBjbGll
bnQuZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKKyAgICAvLyBUaGUgbG9hZGVyIHdpbGwg
YmUgZGVsZXRlZCBhcyBzb29uIGFzIHRoaXMgZnVuY3Rpb24gZXhpdHMuCisgICAgUmVmUHRyPERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcihkb2N1bWVudCwgJmNsaWVudCwgTG9hZFN5bmNocm9ub3VzbHksIHJlcXVl
c3QsIG9wdGlvbnMpKTsKKyAgICBBU1NFUlQobG9hZGVyLT5oYXNPbmVSZWYoKSk7CiB9CiAKLVBh
c3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxi
YWNrc1NldHRpbmcsIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxz
IHN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kpCitQYXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKGRv
Y3VtZW50KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBh
ZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKGRvY3VtZW50LCBjbGllbnQsIHJl
cXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMs
IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpKTsKKyAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
KGRvY3VtZW50LCBjbGllbnQsIExvYWRBc3luY2hyb25vdXNseSwgcmVxdWVzdCwgb3B0aW9ucykp
OwogICAgIGlmICghbG9hZGVyLT5tX2xvYWRlcikKICAgICAgICAgbG9hZGVyID0gMDsKICAgICBy
ZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAotRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENh
bGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGlj
eSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpE
b2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50KiBjbGllbnQsIEJsb2NraW5nQmVoYXZpb3IgYmxvY2tpbmdCZWhhdmlvciwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9u
cyYgb3B0aW9ucykKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZG9jdW1lbnQoZG9j
dW1lbnQpCi0gICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMg
PT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAg
ICwgbV9zYW1lT3JpZ2luUmVxdWVzdChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVx
dWVzdChyZXF1ZXN0LnVybCgpKSkKLSAgICAsIG1fZGVueUNyb3NzT3JpZ2luUmVkaXJlY3QoY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdCkKKyAgICAs
IG1fYXN5bmMoYmxvY2tpbmdCZWhhdmlvciA9PSBMb2FkQXN5bmNocm9ub3VzbHkpCiB7CiAgICAg
QVNTRVJUKGRvY3VtZW50KTsKICAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBBU1NFUlQoc3RvcmVk
Q3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyB8fCBzdG9yZWRDcmVkZW50aWFs
cyA9PSBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIEFTU0VSVChjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5ID09IERlbnlDcm9zc09yaWdpblJlZGlyZWN0IHx8IGNyb3NzT3JpZ2lu
UmVkaXJlY3RQb2xpY3kgPT0gQWxsb3dDcm9zc09yaWdpblJlZGlyZWN0KTsKLSAgICBtX2xvYWRl
ciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJl
cXVlc3QsIGZhbHNlLCBjYWxsYmFja3NTZXR0aW5nID09IFNlbmRMb2FkQ2FsbGJhY2tzLCBjb250
ZW50U25pZmYgPT0gU25pZmZDb250ZW50KTsKKworICAgIG1fc2FtZU9yaWdpblJlcXVlc3QgPSBk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAg
ICBpZiAobV9zYW1lT3JpZ2luUmVxdWVzdCkgeworICAgICAgICBib29sIHNraXBDYW5Mb2FkQ2hl
Y2sgPSBmYWxzZTsKKyAgICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgc2tpcENhbkxvYWRDaGVj
ayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fb3B0aW9ucy5jcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VF
cnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9vcHRpb25zLmZv
cmNlQ3Jvc3NPcmlnaW5QcmVmbGlnaHQgJiYgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVl
c3QocmVxdWVzdC5odHRwTWV0aG9kKCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkKKyAg
ICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9hY3R1YWxSZXF1ZXN0LnNldChuZXcgUmVzb3VyY2VSZXF1ZXN0KHJl
cXVlc3QpKTsKKworICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6
c2hhcmVkKCkuY2FuU2tpcFByZWZsaWdodChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9T
dHJpbmcoKSwgcmVxdWVzdC51cmwoKSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHJlcXVl
c3QuaHR0cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgICAg
ICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1ha2VDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KHJlcXVlc3QpOworICAgIH0KK30KKwor
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vz
c1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVChp
c1NpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKTsKKworICAgIC8vIENyb3NzLW9yaWdpbiByZXF1ZXN0
cyBhcmUgb25seSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4gY2hl
Y2tpbmcgcmVzcG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBz
ZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBiZSBkZW5pZWQuCisgICAgaWYgKCFy
ZXF1ZXN0LnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKKyAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBwYXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBtb2Rp
Znkgc29tZSBkZXRhaWxzLgorICAgIFJlc291cmNlUmVxdWVzdCBjcm9zc09yaWdpblJlcXVlc3Qo
cmVxdWVzdCk7CisgICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Cisg
ICAgY3Jvc3NPcmlnaW5SZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlP
cmlnaW4oKS0+dG9TdHJpbmcoKSk7CisKKyAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxz
ZTsKKyAgICBsb2FkUmVxdWVzdChjcm9zc09yaWdpblJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2sp
OworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0KHJlcXVlc3QudXJsKCkpOwor
ICAgIHByZWZsaWdodFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKyAgICBwcmVmbGlnaHRS
ZXF1ZXN0LnNldEhUVFBPcmlnaW4obV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSk7CisgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJPUFRJT05TIik7Cisg
ICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9sLVJl
cXVlc3QtTWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOworCisgICAgY29uc3QgSFRUUEhl
YWRlck1hcCYgcmVxdWVzdEhlYWRlckZpZWxkcyA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygp
OworCisgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgeworICAgICAgICBW
ZWN0b3I8VUNoYXI+IGhlYWRlckJ1ZmZlcjsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7CisgICAgICAgIGFwcGVu
ZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgICsraXQ7CisKKyAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlckZpZWxkcy5lbmQo
KTsKKyAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaGVhZGVy
QnVmZmVyLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcp
OworICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsKKyAgICAgICAg
fQorCisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3Mt
Q29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1ZmZlcikpOwor
ICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMocmVxdWVzdEhlYWRl
ckZpZWxkcyk7CisgICAgfQorCisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gZmFsc2U7Cisg
ICAgbG9hZFJlcXVlc3QocHJlZmxpZ2h0UmVxdWVzdCwgc2tpcENhbkxvYWRDaGVjayk7CiB9CiAK
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcigpCkBA
IC0xMjMsNyArMTY2LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5k
UgogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVjdCBj
b3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgotICAgIGlmIChtX2RlbnlD
cm9zc09yaWdpblJlZGlyZWN0ICYmICFtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CisgICAgaWYgKCFtX29wdGlvbnMuYWxsb3dDcm9zc09y
aWdpblJlZGlyZWN0ICYmICFtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0
KHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI+IHByb3RlY3QodGhpcyk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVj
aygpOwogICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CkBAIC0xNDMsNyArMTg2
LDMxIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXYKICAgICBBU1NF
UlQobV9jbGllbnQpOwogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2Fk
ZXIpOwogCi0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAg
aWYgKG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xD
aGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCkpKSB7CisgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3VsdChuZXcgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0obV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpKTsKKyAg
ICAgICAgaWYgKCFwcmVmbGlnaHRSZXN1bHQtPnBhcnNlKHJlc3BvbnNlKQorICAgICAgICAgICAg
fHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1
ZXN0LT5odHRwTWV0aG9kKCkpCisgICAgICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxv
d3NDcm9zc09yaWdpbkhlYWRlcnMobV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkp
KSB7CisgICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpz
aGFyZWQoKS5hcHBlbmRFbnRyeShtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKKyAgICAg
ICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX29wdGlvbnMu
YWxsb3dDcmVkZW50aWFscywgbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIH0KIH0KIAogdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKQEAgLTE1OCw3ICsy
MjUsMTYgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaAogewogICAg
IEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwogICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAg
bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobG9hZGVyLT5pZGVudGlmaWVyKCkpOworICAgIGRp
ZEZpbmlzaExvYWRpbmcobG9hZGVyLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpCit7CisgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgeworICAgICAgICBBU1NFUlQoIW1fc2Ft
ZU9yaWdpblJlcXVlc3QpOworICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQogCiB2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTE3NCw3ICsyNTAsNyBAQCBi
b29sIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkCiB7CiAgICAgQVNTRVJUX1VO
VVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CiAKLSAgICBpZiAoIW1fYWxsb3dTdG9y
ZWRDcmVkZW50aWFscykgeworICAgIGlmICghbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpIHsK
ICAgICAgICAgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgPSBmYWxzZTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMjAwLDQgKzI3Niw2MSBAQCB2b2lkIERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcjo6cmVjZWl2ZWRDCiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNhbmNlbGxhdGlvbihjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkpOwogfQogCit2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0U3VjY2VzcygpCit7CisgICAgT3du
UHRyPFJlc291cmNlUmVxdWVzdD4gYWN0dWFsUmVxdWVzdDsKKyAgICBhY3R1YWxSZXF1ZXN0LnN3
YXAobV9hY3R1YWxSZXF1ZXN0KTsKKworICAgIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IHRydWU7
ICAvLyBvayB0byBza2lwIGxvYWQgY2hlY2sgc2luY2Ugd2UgYWxyZWFkeSBhc2tlZCBhYm91dCB0
aGUgcHJlZmxpZ2h0IHJlcXVlc3QKKyAgICBsb2FkUmVxdWVzdCgqYWN0dWFsUmVxdWVzdCwgc2tp
cENhbkxvYWRDaGVjayk7Cit9CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVm
bGlnaHRGYWlsdXJlKCkKK3sKKyAgICBtX2NsaWVudC0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKCkp
OworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNraXBDYW5Mb2FkQ2hlY2spCit7CisgICAg
aWYgKG1fYXN5bmMpIHsKKyAgICAgICAgLy8gRG9uJ3Qgc25pZmYgY29udGVudCBvciBzZW5kIGxv
YWQgY2FsbGJhY2tzIGZvciB0aGUgcHJlZmxpZ2h0IHJlcXVlc3QuCisgICAgICAgIGJvb2wgc2Vu
ZExvYWRDYWxsYmFja3MgPSBtX29wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgJiYgIW1fYWN0dWFs
UmVxdWVzdDsKKyAgICAgICAgYm9vbCBzbmlmZkNvbnRlbnQgPSBtX29wdGlvbnMuc25pZmZDb250
ZW50ICYmICFtX2FjdHVhbFJlcXVlc3Q7CisgICAgICAgIG1fbG9hZGVyID0gU3VicmVzb3VyY2VM
b2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBza2lwQ2Fu
TG9hZENoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucy5zbmlm
ZkNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMuCisgICAg
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBSZXNvdXJjZUVycm9yIGVycm9y
OworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7CisgICAg
aWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3VtZW50
LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKworICAgIC8vIE5vIGV4
Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIy
OTg+LgorICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3
YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCisgICAgaWYgKCFlcnJvci5pc051bGwoKSAm
JiAhcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgPD0gMCkgeworICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBhbG9uZyB3aXRoIHRoZSBv
bmUgaW4gd2lsbFNlbmRSZXF1ZXN0IGlzIHNwZWNpZmljIHRvIHhociBhbmQKKyAgICAvLyBzaG91
bGQgYmUgbWFkZSBtb3JlIGdlbmVyaWMuCisgICAgaWYgKG1fc2FtZU9yaWdpblJlcXVlc3QgJiYg
IW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkp
KSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKKwor
ICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0
YSgpKTsKKyAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisgICAg
ZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisKKyAgICBkaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNDcwNzQpCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00NCw4ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBw
cml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50ICB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIFN0b3JlZENyZWRlbnRpYWxz
KTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBj
cmVhdGUoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywg
Q3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUo
RG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgdmlydHVhbCB+RG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
OwpAQCAtNTgsNyArNTksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVyZWZUaHJlYWRhYmxlTG9hZGVyKCkgeyBkZXJlZigpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7
CisgICAgICAgIGVudW0gQmxvY2tpbmdCZWhhdmlvciB7CisgICAgICAgICAgICBMb2FkU3luY2hy
b25vdXNseSwKKyAgICAgICAgICAgIExvYWRBc3luY2hyb25vdXNseQorICAgICAgICB9OworCisg
ICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKTsKKwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlcios
IHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpOwogCkBAIC03MSwxMiArNzgsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKIAorICAgICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBtYWtlU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCk7CisgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGln
aHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKKyAgICAgICAgdm9pZCBwcmVmbGln
aHRTdWNjZXNzKCk7CisgICAgICAgIHZvaWQgcHJlZmxpZ2h0RmFpbHVyZSgpOworCisgICAgICAg
IHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBza2lwQ2FuTG9h
ZENoZWNrKTsKKwogICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOwog
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1l
bnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwor
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgICAgIGJvb2wg
bV9zYW1lT3JpZ2luUmVxdWVzdDsKLSAgICAgICAgYm9vbCBtX2RlbnlDcm9zc09yaWdpblJlZGly
ZWN0OworICAgICAgICBib29sIG1fYXN5bmM7CisgICAgICAgIE93blB0cjxSZXNvdXJjZVJlcXVl
c3Q+IG1fYWN0dWFsUmVxdWVzdDsgIC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29udHJvbCBw
cmVmbGlnaHQgY2hlY2tzCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDMzICs0
MCwzMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8VGhyZWFkYWJsZUxv
YWRlcj4gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRlbnRTbmlm
ZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDcm9z
c09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpIAorUGFzc1Jl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRp
b25zJiBvcHRpb25zKSAKIHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBBU1NFUlQoY29udGV4
dCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpCi0gICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBjbGllbnQsIFdvcmtlclJ1bkxvb3A6
OmRlZmF1bHRNb2RlKCksIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwg
c3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBy
ZXR1cm4gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KSwgY2xpZW50LCBXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpLCBy
ZXF1ZXN0LCBvcHRpb25zKTsKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAogICAgIEFTU0VS
VChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQsIHJl
cXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMs
IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQs
IHJlcXVlc3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQs
IFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQordm9pZCBUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwgc3RvcmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09y
aWdpblJlZGlyZWN0KTsKKyAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIHJl
cXVlc3QsIGNsaWVudCwgb3B0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCiAKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsK
LSAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBzdG9yZWRD
cmVkZW50aWFscyk7CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIHJlcXVlc3QsIGNs
aWVudCwgb3B0aW9ucyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9UaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS9sb2FkZXIv
VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBj
bGFzcyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OwogCi0gICAgZW51bSBMb2FkQ2FsbGJhY2tzIHsK
LSAgICAgICAgU2VuZExvYWRDYWxsYmFja3MsCi0gICAgICAgIERvTm90U2VuZExvYWRDYWxsYmFj
a3MKLSAgICB9OwotCi0gICAgZW51bSBDb250ZW50U25pZmYgewotICAgICAgICBTbmlmZkNvbnRl
bnQsCi0gICAgICAgIERvTm90U25pZmZDb250ZW50Ci0gICAgfTsKLQogICAgIGVudW0gU3RvcmVk
Q3JlZGVudGlhbHMgewogICAgICAgICBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAogICAgICAgICBE
b05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMKQEAgLTYyLDEzICs1MiwyMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIERlbnlDcm9zc09yaWdpblJlZGlyZWN0LAogICAgICAgICBBbGxv
d0Nyb3NzT3JpZ2luUmVkaXJlY3QKICAgICB9OworICAgIAorICAgIHN0cnVjdCBUaHJlYWRhYmxl
TG9hZGVyT3B0aW9ucyB7CisgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucygpIDogc2VuZExv
YWRDYWxsYmFja3MoZmFsc2UpLCBzbmlmZkNvbnRlbnQoZmFsc2UpLCBjcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2woZmFsc2UpLCBhbGxvd0NyZWRlbnRpYWxzKGZhbHNlKSwgZm9yY2VDcm9zc09yaWdp
blByZWZsaWdodChmYWxzZSksIGFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdChmYWxzZSkgeyB9Cisg
ICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzOworICAgICAgYm9vbCBzbmlmZkNvbnRlbnQ7Cisg
ICAgICBib29sIGNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbDsKKyAgICAgIGJvb2wgYWxsb3dDcmVk
ZW50aWFsczsKKyAgICAgIGJvb2wgZm9yY2VDcm9zc09yaWdpblByZWZsaWdodDsKKyAgICAgIGJv
b2wgYWxsb3dDcm9zc09yaWdpblJlZGlyZWN0OworICAgIH07CiAKICAgICAvLyBVc2VmdWwgZm9y
IGRvaW5nIGxvYWRlciBvcGVyYXRpb25zIGZyb20gYW55IHRocmVhZCAobm90IHRocmVhZHNhZmUs
IAogICAgIC8vIGp1c3QgYWJsZSB0byBydW4gb24gdGhyZWFkcyBvdGhlciB0aGFuIHRoZSBtYWlu
IHRocmVhZCkuCiAgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgU3RvcmVkQ3JlZGVudGlhbHMpOwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBM
b2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
VGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKICAgICAgICAgdm9pZCByZWYoKSB7IHJlZlRocmVh
ZGFibGVMb2FkZXIoKTsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1MywxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHlNb2RlW10gPSAibG9hZFJlc291cmNlU3luY2hyb25vdXNseU1vZGUiOwogCi1Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQqIHdvcmtl
ckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0
YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNh
bGxiYWNrc1NldHRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kpCitXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
KFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKICAgICA6IG1fd29y
a2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQogICAgICwgbV93b3JrZXJDbGllbnRXcmFwcGVyKFRo
cmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpjcmVhdGUoY2xpZW50KSkKLSAgICAsIG1fYnJp
ZGdlKCoobmV3IE1haW5UaHJlYWRCcmlkZ2UobV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtl
ckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpLCB0YXNrTW9kZSwgcmVxdWVz
dCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSkpKQorICAgICwgbV9icmlkZ2UoKihuZXcgTWFpblRocmVh
ZEJyaWRnZShtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCkt
PndvcmtlckxvYWRlclByb3h5KCksIHRhc2tNb2RlLCByZXF1ZXN0LCBvcHRpb25zKSkpCiB7CiB9
CiAKQEAgLTY2LDcgKzY1LDcgQEAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6fldvcmtlclRocmVh
ZGFibAogICAgIG1fYnJpZGdlLmRlc3Ryb3koKTsKIH0KIAotdm9pZCBXb3JrZXJUaHJlYWRhYmxl
TG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NP
cmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQordm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYg
b3B0aW9ucykKIHsKICAgICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+
dGhyZWFkKCktPnJ1bkxvb3AoKTsKIApAQCAtNzQsOSArNzMsNyBAQCB2b2lkIFdvcmtlclRocmVh
ZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjCiAgICAgU3RyaW5nIG1vZGUgPSBsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5TW9kZTsKICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29w
LmNyZWF0ZVVuaXF1ZUlkKCkpKTsKIAotICAgIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYgPSBy
ZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgPyBTbmlmZkNvbnRlbnQgOiBEb05vdFNuaWZmQ29u
dGVudDsKLSAgICBSZWZQdHI8V29ya2VyVGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0gV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtlckNvbnRleHQsICZjbGllbnQsIG1vZGUsIHJl
cXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVu
dGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOwotCisgICAgUmVmUHRyPFdvcmtlclRo
cmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSh3
b3JrZXJDb250ZXh0LCAmY2xpZW50LCBtb2RlLCByZXF1ZXN0LCBvcHRpb25zKTsKICAgICBNZXNz
YWdlUXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsK
ICAgICB3aGlsZSAoIWxvYWRlci0+ZG9uZSgpICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJt
aW5hdGVkKQogICAgICAgICByZXN1bHQgPSBydW5Mb29wLnJ1bkluTW9kZSh3b3JrZXJDb250ZXh0
LCBtb2RlKTsKQEAgLTkxLDIxICs4OCwyMCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
OmNhbmNlbCgpCiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
Ok1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBl
cj4gd29ya2VyQ2xpZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkmIGxvYWRlclByb3h5LCBj
b25zdCBTdHJpbmcmIHRhc2tNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykK
ICAgICA6IG1fd29ya2VyQ2xpZW50V3JhcHBlcih3b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICwg
bV9sb2FkZXJQcm94eShsb2FkZXJQcm94eSkKICAgICAsIG1fdGFza01vZGUodGFza01vZGUuY29w
eSgpKQogewogICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOwotICAgIG1f
bG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJl
YWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIsIHRoaXMsIHJlcXVlc3QsIGNhbGxiYWNr
c1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyLCB0
aGlzLCByZXF1ZXN0LCBvcHRpb25zKSk7CiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1h
aW5UaHJlYWRCcmlkZ2U6On5NYWluVGhyZWFkQnJpZGdlKCkKIHsKIH0KIAotdm9pZCBXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQ
dHIsIGF1dG9fcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEs
IExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK3ZvaWQgV29ya2VyVGhyZWFkYWJs
ZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNYWluVGhyZWFkQnJpZGdlKiB0aGlzUHRyLCBhdXRv
X3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhLCBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CkBAIC0xMTcsNyArMTEzLDcgQEAg
dm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgYSBzaXRlIHJlcXVlc3RzIGEgbG9jYWwgcmVzb3VyY2UsIHRoZW4gdGhpcyB3aWxsIHJl
dHVybiBhIG5vbi16ZXJvIHZhbHVlIGJ1dCB0aGUgc3luYyBwYXRoCiAgICAgLy8gd2lsbCByZXR1
cm4gYSAwIHZhbHVlLiAgRWl0aGVyIHRoaXMgc2hvdWxkIHJldHVybiAwIG9yIHRoZSBvdGhlciBj
b2RlIHBhdGggc2hvdWxkIGRvIGEgY2FsbGJhY2sgd2l0aAogICAgIC8vIGEgZmFpbHVyZS4KLSAg
ICB0aGlzUHRyLT5tX21haW5UaHJlYWRMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
Y29udGV4dCwgdGhpc1B0ciwgKnJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlm
Ziwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgIHRo
aXNQdHItPm1fbWFpblRocmVhZExvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250
ZXh0LCB0aGlzUHRyLCAqcmVxdWVzdCwgb3B0aW9ucyk7CiAgICAgQVNTRVJUKHRoaXNQdHItPm1f
bWFpblRocmVhZExvYWRlcik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVh
ZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmgJKHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV29ya2VyVGhyZWFkYWJsZUxvYWRlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVMb2FkZXI+LCBwdWJsaWMgVGhyZWFkYWJsZUxv
YWRlciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50JiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQ
b2xpY3kpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
PiBjcmVhdGUoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZm
IGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKKyAgICAgICAg
c3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0KiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIGNvbnN0IFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zJik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRo
cmVhZGFibGVMb2FkZXI+IGNyZWF0ZShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMm
IG9wdGlvbnMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29y
a2VyVGhyZWFkYWJsZUxvYWRlcih3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCByZXF1
ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBj
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdvcmtlclRocmVhZGFibGVMb2FkZXIod29ya2VyQ29udGV4dCwgY2xpZW50LCB0YXNrTW9k
ZSwgcmVxdWVzdCwgb3B0aW9ucykpOwogICAgICAgICB9CiAKICAgICAgICAgfldvcmtlclRocmVh
ZGFibGVMb2FkZXIoKTsKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlIDogVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiAg
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIC8vIEFsbCBleGVjdXRlZCBvbiB0aGUgd29ya2Vy
IGNvbnRleHQncyB0aHJlYWQuCi0gICAgICAgICAgICBNYWluVGhyZWFkQnJpZGdlKFBhc3NSZWZQ
dHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+LCBXb3JrZXJMb2FkZXJQcm94eSYsIGNv
bnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRDYWxsYmFj
a3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQ
b2xpY3kpOworICAgICAgICAgICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFi
bGVMb2FkZXJDbGllbnRXcmFwcGVyPiwgV29ya2VyTG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcm
IHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVy
T3B0aW9ucyYpOwogICAgICAgICAgICAgdm9pZCBjYW5jZWwoKTsKICAgICAgICAgICAgIHZvaWQg
ZGVzdHJveSgpOwogCkBAIC0xMDksNyArMTA5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZERlc3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqKTsKICAgICAgICAgICAgIH5NYWluVGhyZWFkQnJpZGdl
KCk7CiAKLSAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDcmVhdGVMb2FkZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqLCBzdGQ6OmF1dG9fcHRyPENy
b3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4sIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlm
ZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAg
ICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIHN0ZDo6YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPiwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMpOwogICAgICAgICAgICAg
c3RhdGljIHZvaWQgbWFpblRocmVhZENhbmNlbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFp
blRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVu
c2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVz
VG9CZVNlbnQpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC0xMzMsNyArMTMzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgU3RyaW5nIG1fdGFza01vZGU7CiAgICAgICAgIH07CiAKLSAg
ICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIExvYWRDYWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdv
cmtlckNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNr
TW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmKTsKIAogICAgICAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0Owog
ICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IG1fd29ya2VyQ2xp
ZW50V3JhcHBlcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHJldmlz
aW9uIDQ3MDc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTdHJpbmc7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAg
ICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YTsKKyAgICBzdHJ1Y3QgVGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaCB7CiAgICAgICAgIHR5cGVkZWYgVCBUeXBlOwpA
QCAtNjUsNiArNjYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgVCo+IDogcHVibGljIENy
b3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2g8VCo+IHsKICAgICB9OwogCisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucz4gOiBwdWJsaWMgQ3Jvc3NUaHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucz4geworICAgIH07CisKICAgICAvLyBDdXN0b20gY29weSBtZXRob2RzLgogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFQ+ID4gPiB7CiAgICAgICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxUPiBUeXBlOwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAJ
KHJldmlzaW9uIDQ3MDc0KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDEyIEBAIHZvaWQgV29ya2VyU2NyaXB0TG9h
ZGVyOjpsb2FkU3luY2hyb25vdXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgKnJlcXVlc3QsICp0aGlzLCBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKworICAgIFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
ID0gdHJ1ZTsKKyAgICBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdCA9IGNyb3NzT3Jp
Z2luUmVkaXJlY3RQb2xpY3kgPyBBbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgOiBEZW55Q3Jvc3NP
cmlnaW5SZWRpcmVjdDsKKworICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpLCAqcmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOwogfQogICAgIAogdm9pZCBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIENyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVy
Q2xpZW50KiBjbGllbnQpCkBAIC03Miw3ICs3NywxMSBAQCB2b2lkIFdvcmtlclNjcmlwdExvYWRl
cjo6bG9hZEFzeW5jaHJvbm91CiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3RocmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgdGhpcywgKnJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3Ms
IERvTm90U25pZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJl
ZGlyZWN0UG9saWN5KTsKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAg
IG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CisgICAgb3B0aW9ucy5hbGxvd0Nyb3Nz
T3JpZ2luUmVkaXJlY3QgPSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5ID8gQWxsb3dDcm9zc09y
aWdpblJlZGlyZWN0IDogRGVueUNyb3NzT3JpZ2luUmVkaXJlY3Q7CisKKyAgICBtX3RocmVhZGFi
bGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgdGhpcywgKnJlcXVlc3QsIG9wdGlvbnMpOwogfQogCiBQYXNzT3duUHRyPFJlc291cmNlUmVx
dWVzdD4gV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDog
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNDcwNzQpCisrKyBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRl
ICJDYWNoZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuaCIKLSNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
LmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC05MywyNSArOTIsMjUgQEAgc3RhdGljIGJvb2wgaXNW
YWxpZFRva2VuKGNvbnN0IFN0cmluZyYgbgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAg
ICAgIFVDaGFyIGMgPSBuYW1lW2ldOwotICAgICAgICAKKwogICAgICAgICBpZiAoYyA+PSAxMjcg
fHwgYyA8PSAzMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAg
ICAgaWYgKGMgPT0gJygnIHx8IGMgPT0gJyknIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nIHx8IGMg
PT0gJ0AnIHx8CiAgICAgICAgICAgICBjID09ICcsJyB8fCBjID09ICc7JyB8fCBjID09ICc6JyB8
fCBjID09ICdcXCcgfHwgYyA9PSAnXCInIHx8CiAgICAgICAgICAgICBjID09ICcvJyB8fCBjID09
ICdbJyB8fCBjID09ICddJyB8fCBjID09ICc/JyB8fCBjID09ICc9JyB8fAogICAgICAgICAgICAg
YyA9PSAneycgfHwgYyA9PSAnfScpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCisKIHN0YXRpYyBib29sIGlzVmFsaWRI
ZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QgCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QKICAgICAvLyBmaWVsZC12YWx1ZSBpbiBzZWN0aW9u
IDQuMiBvZiBSRkMgMjYxNi4KLSAgICAgICAgCisKICAgICByZXR1cm4gIW5hbWUuY29udGFpbnMo
J1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7CiB9CiAKQEAgLTE0Myw5ICsxNDIsOSBAQCBY
TUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlCiAgICAgLCBtX3Jlc3BvbnNl
VGV4dCgiIikKICAgICAsIG1fY3JlYXRlZERvY3VtZW50KGZhbHNlKQogICAgICwgbV9lcnJvcihm
YWxzZSkKKyAgICAsIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCh0cnVlKQogICAgICwgbV91cGxvYWRD
b21wbGV0ZShmYWxzZSkKICAgICAsIG1fc2FtZU9yaWdpblJlcXVlc3QodHJ1ZSkKLSAgICAsIG1f
aW5QcmVmbGlnaHQoZmFsc2UpCiAgICAgLCBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3QoZmFs
c2UpCiAgICAgLCBtX3JlY2VpdmVkTGVuZ3RoKDApCiAgICAgLCBtX2xhc3RTZW5kTGluZU51bWJl
cigwKQpAQCAtMjA3LDcgKzIwNiw3IEBAIERvY3VtZW50KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9u
c2VYTUwoKSAKICAgICAgICAgICAgIG1fcmVzcG9uc2VYTUwtPndyaXRlKFN0cmluZyhtX3Jlc3Bv
bnNlVGV4dCkpOwogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+ZmluaXNoUGFyc2luZygpOwog
ICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+Y2xvc2UoKTsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICBpZiAoIW1fcmVzcG9uc2VYTUwtPndlbGxGb3JtZWQoKSkKICAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlWE1MID0gMDsKICAgICAgICAgfQpAQCAtMjM2LDcgKzIzNSw3IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmFkZEV2ZW50TGlzdGVuZXIoY28KICAgICAgICAgZm9yIChMaXN0ZW5l
clZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3Rl
bmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKQogICAgICAgICAgICAg
aWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAorCiAgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7
CiAgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKICAg
ICB9CkBAIC0zMjIsMTAgKzMyMSwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0
IFN0cmluZyYgCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKKwogICAgIC8vIE1ldGhvZCBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUuIEJ1dCBz
aW5jZSBGaXJlZm94IHVwcGVyY2FzZXMgbWV0aG9kIG5hbWVzIGl0IGtub3dzLCB3ZSdsbCBkbyB0
aGUgc2FtZS4KICAgICBTdHJpbmcgbWV0aG9kVXBwZXIobWV0aG9kLnVwcGVyKCkpOwotICAgIAor
CiAgICAgaWYgKG1ldGhvZFVwcGVyID09ICJUUkFDRSIgfHwgbWV0aG9kVXBwZXIgPT0gIlRSQUNL
IiB8fCBtZXRob2RVcHBlciA9PSAiQ09OTkVDVCIpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9F
UlI7CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSw3ICszMzQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBpZiAobWV0aG9kVXBwZXIgPT0gIkNPUFki
IHx8IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhvZFVwcGVyID09ICJHRVQiIHx8IG1l
dGhvZFVwcGVyID09ICJIRUFEIgogICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8
IG1ldGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRo
b2RVcHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZFIgotICAgICAgICB8fCBt
ZXRob2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhv
ZFVwcGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0
aG9kVXBwZXIgPT0gIlBVVCIgCisgICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJPUFRJT05TIiB8
fCBtZXRob2RVcHBlciA9PSAiUE9TVCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BGSU5EIiB8fCBt
ZXRob2RVcHBlciA9PSAiUFJPUFBBVENIIiB8fCBtZXRob2RVcHBlciA9PSAiUFVUIgogICAgICAg
ICB8fCBtZXRob2RVcHBlciA9PSAiVU5MT0NLIikKICAgICAgICAgbV9tZXRob2QgPSBtZXRob2RV
cHBlcjsKICAgICBlbHNlCkBAIC0zNTcsNyArMzU2LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
b3Blbihjb25zdCBTdHJpbmcmIAogewogICAgIEtVUkwgdXJsV2l0aENyZWRlbnRpYWxzKHVybCk7
CiAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVzZXIodXNlcik7Ci0gICAgCisKICAgICBvcGVu
KG1ldGhvZCwgdXJsV2l0aENyZWRlbnRpYWxzLCBhc3luYywgZWMpOwogfQogCkBAIC0zNjYsNyAr
MzY1LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogICAgIEtV
UkwgdXJsV2l0aENyZWRlbnRpYWxzKHVybCk7CiAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFVz
ZXIodXNlcik7CiAgICAgdXJsV2l0aENyZWRlbnRpYWxzLnNldFBhc3MocGFzc3dvcmQpOwotICAg
IAorCiAgICAgb3BlbihtZXRob2QsIHVybFdpdGhDcmVkZW50aWFscywgYXN5bmMsIGVjKTsKIH0K
IApAQCAtNDYzLDM0ICs0NjIsMjMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChGaWxlKiBi
b2R5LCBFeAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIC8vIFVwbG9hZCBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGRpc2Fs
bG93ZWQgZm9yIHNpbXBsZSBjcm9zcy1vcmlnaW4gcmVxdWVzdHMsIGJlY2F1c2UgUE9TVGluZyB0
byBhbiBVUkwgdGhhdCBkb2VzIG5vdAotICAgIC8vIHBlcm1pdCBjcm9zcyBvcmlnaW4gcmVxdWVz
dHMgc2hvdWxkIGxvb2sgZXhhY3RseSBsaWtlIFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBu
b3QgcmVzcG9uZCBhdCBhbGwuIElmIGEgbGlzdGVuZXIgZXhpc3RzCi0gICAgLy8gd2hlbiBjcmVh
dGluZyB0aGUgcmVxdWVzdCwgaXQgd2lsbCBmb3JjZSBwcmVmbGlnaHQuCisgICAgLy8gVGhlIHBy
ZXNlbmNlIG9mIHVwbG9hZCBldmVudCBsaXN0ZW5lcnMgZm9yY2VzIHVzIHRvIHVzZSBwcmVmbGln
aHRpbmcgYmVjYXVzZSBQT1NUaW5nIHRvIGFuIFVSTCB0aGF0IGRvZXMgbm90CisgICAgLy8gcGVy
bWl0IGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBzaG91bGQgbG9vayBleGFjdGx5IGxpa2UgUE9TVGlu
ZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdCByZXNwb25kIGF0IGFsbC4KICAgICAvLyBBbHNvLCBv
bmx5IGFzeW5jIHJlcXVlc3RzIHN1cHBvcnQgdXBsb2FkIHByb2dyZXNzIGV2ZW50cy4KLSAgICBt
X3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBmYWxzZTsKKyAgICBib29sIGZvcmNlUHJlZmxpZ2h0ID0g
ZmFsc2U7CiAgICAgaWYgKG1fYXN5bmMpIHsKICAgICAgICAgZGlzcGF0Y2hMb2FkU3RhcnRFdmVu
dCgpOwogICAgICAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9keSAmJiBtX3VwbG9hZCkgewotICAg
ICAgICAgICAgbV91cGxvYWRFdmVudHNBbGxvd2VkID0gbV91cGxvYWQtPmhhc0xpc3RlbmVycygp
OworICAgICAgICAgICAgZm9yY2VQcmVmbGlnaHQgPSBtX3VwbG9hZC0+aGFzTGlzdGVuZXJzKCk7
CiAgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hMb2FkU3RhcnRFdmVudCgpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgbV9zYW1lT3JpZ2luUmVxdWVzdCA9IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChtX3VybCk7CiAKLSAgICBpZiAo
IW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKLSAgICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVx
dWVzdChlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3VwbG9hZEV2ZW50c0Fs
bG93ZWQgPSB0cnVlOwotCi0gICAgbWFrZVNhbWVPcmlnaW5SZXF1ZXN0KGVjKTsKLX0KLQotdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6bWFrZVNhbWVPcmlnaW5SZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVChtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKKyAgICAvLyBXZSBhbHNvIHJl
bWVtYmVyIHdoZXRoZXIgdXBsb2FkIGV2ZW50cyBzaG91bGQgYmUgYWxsb3dlZCBmb3IgdGhpcyBy
ZXF1ZXN0IGluIGNhc2UgdGhlIHVwbG9hZCBsaXN0ZW5lcnMgYXJlCisgICAgLy8gYWRkZWQgYWZ0
ZXIgdGhlIHJlcXVlc3QgaXMgc3RhcnRlZC4KKyAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSAh
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1fcmVxdWVzdEhlYWRl
cnMpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91cmwpOwogICAgIHJlcXVlc3Qu
c2V0SFRUUE1ldGhvZChtX21ldGhvZCk7CkBAIC01MDQsMjAyICs0OTIsMjkgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6bWFrZVNhbWVPcmlnaW5SZXF1ZQogICAgIGlmIChtX3JlcXVlc3RIZWFkZXJz
LnNpemUoKSA+IDApCiAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVl
c3RIZWFkZXJzKTsKIAotICAgIGlmIChtX2FzeW5jKQotICAgICAgICBsb2FkUmVxdWVzdEFzeW5j
aHJvbm91c2x5KHJlcXVlc3QpOwotICAgIGVsc2UKLSAgICAgICAgbG9hZFJlcXVlc3RTeW5jaHJv
bm91c2x5KHJlcXVlc3QsIGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFrZUNyb3Nz
T3JpZ2luQWNjZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoIW1f
c2FtZU9yaWdpblJlcXVlc3QpOwotCi0gICAgaWYgKCFtX3VwbG9hZEV2ZW50c0FsbG93ZWQgJiYg
aXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1fcmVxdWVzdEhlYWRl
cnMpKQotICAgICAgICBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGVjKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0
KGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQoaXNTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QobV9tZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpKTsKKyAgICBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxs
YmFja3MgPSB0cnVlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAgb3B0
aW9ucy5jcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wgPSB0cnVlOworICAgIG9wdGlvbnMuYWxsb3dD
cmVkZW50aWFscyA9IG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHM7
CisgICAgb3B0aW9ucy5mb3JjZUNyb3NzT3JpZ2luUHJlZmxpZ2h0ID0gZm9yY2VQcmVmbGlnaHQ7
CisgICAgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3QgPSBmYWxzZTsKIAotICAgIC8v
IENyb3NzLW9yaWdpbiByZXF1ZXN0cyBhcmUgb25seSBkZWZpbmVkIGZvciBIVFRQLiBXZSB3b3Vs
ZCBjYXRjaCB0aGlzIHdoZW4gY2hlY2tpbmcgcmVzcG9uc2UgaGVhZGVycyBsYXRlciwgYnV0IHRo
ZXJlIGlzIG5vIHJlYXNvbiB0byBzZW5kIGEgcmVxdWVzdCB0aGF0J3MgZ3VhcmFudGVlZCB0byBi
ZSBkZW5pZWQuCi0gICAgaWYgKCFtX3VybC5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7Ci0gICAg
ICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5FVFdPUktfRVJSOwotICAgICAgICBu
ZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEtVUkwgdXJsID0g
bV91cmw7Ci0gICAgdXJsLnNldFVzZXIoU3RyaW5nKCkpOwotICAgIHVybC5zZXRQYXNzKFN0cmlu
ZygpKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAgcmVxdWVzdC5z
ZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEFsbG93SFRUUENvb2tpZXMo
bV9pbmNsdWRlQ3JlZGVudGlhbHMpOwotICAgIHJlcXVlc3Quc2V0SFRUUE9yaWdpbihzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOwotCi0gICAg
aWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkKLSAgICAgICAgcmVxdWVzdC5hZGRIVFRQ
SGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwotCi0gICAgaWYgKG1fcmVxdWVzdEVudGl0
eUJvZHkpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJHRVQiKTsKLSAgICAgICAgQVNT
RVJUKG1fbWV0aG9kICE9ICJIRUFEIik7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkobV9y
ZXF1ZXN0RW50aXR5Qm9keS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIGlmIChtX2FzeW5jKQot
ICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVlc3QpOwotICAgIGVsc2UKLSAg
ICAgICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHJlcXVlc3QsIGVjKTsKLX0KLQotdm9pZCBY
TUxIdHRwUmVxdWVzdDo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQo
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgU3RyaW5nIG9yaWdpbiA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKTsKLSAgICBLVVJMIHVybCA9
IG1fdXJsOwotICAgIHVybC5zZXRVc2VyKFN0cmluZygpKTsKLSAgICB1cmwuc2V0UGFzcyhTdHJp
bmcoKSk7Ci0KLSAgICBpZiAoIUNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJl
ZCgpLmNhblNraXBQcmVmbGlnaHQob3JpZ2luLCB1cmwsIG1faW5jbHVkZUNyZWRlbnRpYWxzLCBt
X21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykpIHsKLSAgICAgICAgbV9pblByZWZsaWdodCA9IHRy
dWU7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCBwcmVmbGlnaHRSZXF1ZXN0KHVybCk7Ci0gICAg
ICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiT1BUSU9OUyIpOwotICAgICAgICBw
cmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiT3JpZ2luIiwgb3JpZ2luKTsKLSAg
ICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1Db250cm9s
LVJlcXVlc3QtTWV0aG9kIiwgbV9tZXRob2QpOwotCi0gICAgICAgIGlmIChtX3JlcXVlc3RIZWFk
ZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gaGVhZGVyQnVmZmVy
OwotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlcXVl
c3RIZWFkZXJzLmJlZ2luKCk7Ci0gICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+
Zmlyc3QpOwotICAgICAgICAgICAgKytpdDsKLQotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0SGVhZGVycy5lbmQoKTsKLSAgICAgICAgICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBoZWFkZXJCdWZmZXIu
YXBwZW5kKCcsJyk7Ci0gICAgICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnICcpOwot
ICAgICAgICAgICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1
ZmZlcikpOwotICAgICAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRz
KG1fcmVxdWVzdEhlYWRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fYXN5bmMpIHsK
LSAgICAgICAgICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgICAgICBs
b2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHByZWZsaWdodFJlcXVlc3QpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHBy
ZWZsaWdodFJlcXVlc3QsIGVjKTsKLSAgICAgICAgbV9pblByZWZsaWdodCA9IGZhbHNlOwotCi0g
ICAgICAgIGlmIChlYykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTZW5k
IHRoZSBhY3R1YWwgcmVxdWVzdC4KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwot
ICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxv
d0hUVFBDb29raWVzKG1faW5jbHVkZUNyZWRlbnRpYWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBI
ZWFkZXJGaWVsZCgiT3JpZ2luIiwgb3JpZ2luKTsKLQotICAgIGlmIChtX3JlcXVlc3RIZWFkZXJz
LnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVl
c3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3JlcXVlc3RFbnRpdHlCb2R5KSB7Ci0gICAgICAgIEFT
U0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiSEVB
RCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KG1fcmVxdWVzdEVudGl0eUJvZHkucmVs
ZWFzZSgpKTsKLSAgICB9CisgICAgbV9leGNlcHRpb25Db2RlID0gMDsKKyAgICBtX2Vycm9yID0g
ZmFsc2U7CiAKICAgICBpZiAobV9hc3luYykgewotICAgICAgICBtX3VwbG9hZEV2ZW50c0FsbG93
ZWQgPSB0cnVlOwotICAgICAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVlc3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5KHJl
cXVlc3QsIGVjKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6aGFuZGxlQXN5bmNocm9ub3Vz
UHJlZmxpZ2h0UmVzdWx0KCkKLXsKLSAgICBBU1NFUlQobV9pblByZWZsaWdodCk7Ci0gICAgQVNT
RVJUKG1fYXN5bmMpOwotCi0gICAgbV9pblByZWZsaWdodCA9IGZhbHNlOwotCi0gICAgS1VSTCB1
cmwgPSBtX3VybDsKLSAgICB1cmwuc2V0VXNlcihTdHJpbmcoKSk7Ci0gICAgdXJsLnNldFBhc3Mo
U3RyaW5nKCkpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAgICByZXF1
ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwotICAgIHJlcXVlc3Quc2V0QWxsb3dIVFRQQ29v
a2llcyhtX2luY2x1ZGVDcmVkZW50aWFscyk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQT3JpZ2luKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0K
LSAgICBpZiAobV9yZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKQotICAgICAgICByZXF1ZXN0LmFk
ZEhUVFBIZWFkZXJGaWVsZHMobV9yZXF1ZXN0SGVhZGVycyk7Ci0KLSAgICBpZiAobV9yZXF1ZXN0
RW50aXR5Qm9keSkgewotICAgICAgICBBU1NFUlQobV9tZXRob2QgIT0gIkdFVCIpOwotICAgICAg
ICBBU1NFUlQobV9tZXRob2QgIT0gIkhFQUQiKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9k
eShtX3JlcXVlc3RFbnRpdHlCb2R5LnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgbV91cGxvYWRF
dmVudHNBbGxvd2VkID0gdHJ1ZTsKLSAgICBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5KHJlcXVl
c3QpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHko
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NF
UlQoIW1fYXN5bmMpOwotCi0gICAgbV9sb2FkZXIgPSAwOwotICAgIG1fZXhjZXB0aW9uQ29kZSA9
IDA7Ci0gICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSAobV9zYW1lT3Jp
Z2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgICAgICByZXF1ZXN0LnNldFJl
cG9ydFVwbG9hZFByb2dyZXNzKHRydWUpOworICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7CisgICAgICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucyk7CisgICAgfSBlbHNlCisg
ICAgICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCByZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7CiAKLSAgICBUaHJl
YWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgcmVxdWVzdCwgKnRoaXMsIHN0b3JlZENyZWRlbnRpYWxzKTsKICAgICBpZiAoIW1f
ZXhjZXB0aW9uQ29kZSAmJiBtX2Vycm9yKQogICAgICAgICBtX2V4Y2VwdGlvbkNvZGUgPSBYTUxI
dHRwUmVxdWVzdEV4Y2VwdGlvbjo6TkVUV09SS19FUlI7CiAgICAgZWMgPSBtX2V4Y2VwdGlvbkNv
ZGU7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHko
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIEFTU0VSVChtX2FzeW5jKTsKLSAgICBt
X2V4Y2VwdGlvbkNvZGUgPSAwOwotICAgIC8vIFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUgY2Fu
IHJldHVybiBudWxsIGhlcmUsIGZvciBleGFtcGxlIGlmIHdlJ3JlIG5vIGxvbmdlciBhdHRhY2hl
ZCB0byBhIHBhZ2UuCi0gICAgLy8gVGhpcyBpcyB0cnVlIHdoaWxlIHJ1bm5pbmcgb251bmxvYWQg
aGFuZGxlcnMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBzZW5kIFhNTEh0
dHBSZXF1ZXN0cyBmcm9tIG9udW5sb2FkLCA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA5MDQ+LgotICAgIC8vIEZJWE1FOiBNYXliZSBjcmVhdGUgY2FuIHJldHVybiBu
dWxsIGZvciBvdGhlciByZWFzb25zIHRvbz8KLSAgICBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrcyA9
IG1faW5QcmVmbGlnaHQgPyBEb05vdFNlbmRMb2FkQ2FsbGJhY2tzIDogU2VuZExvYWRDYWxsYmFj
a3M7Ci0gICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSAobV9zYW1lT3Jp
Z2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFscykgPyBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgaWYgKG1fdXBsb2FkKQot
ICAgICAgICByZXF1ZXN0LnNldFJlcG9ydFVwbG9hZFByb2dyZXNzKHRydWUpOwotCi0gICAgbV9s
b2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCB0aGlzLCByZXF1ZXN0LCBjYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBzdG9yZWRDcmVk
ZW50aWFscywgRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QpOwotCi0gICAgaWYgKG1fbG9hZGVyKSB7
Ci0gICAgICAgIC8vIE5laXRoZXIgdGhpcyBvYmplY3Qgbm9yIHRoZSBKYXZhU2NyaXB0IHdyYXBw
ZXIgc2hvdWxkIGJlIGRlbGV0ZWQgd2hpbGUKLSAgICAgICAgLy8gYSByZXF1ZXN0IGlzIGluIHBy
b2dyZXNzIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRoZSBsaXN0ZW5lcnMgYWxpdmUsCi0gICAg
ICAgIC8vIGFuZCB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBKYXZhU2NyaXB0IHdyYXBwZXIu
Ci0gICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEZvciBub3cgd2Ugc2hvdWxkIG9ubHkgYmFsYW5jZSB0aGUgbm9uQ2FjaGVkIHJlcXVlc3QgY291
bnQgZm9yIG1haW4tdGhyZWFkIFhIUnMgYW5kIG5vdAotICAgICAgICAvLyBXb3JrZXIgWEhScywg
YXMgdGhlIENhY2hlIGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAgICAgICAgLy8gVGhpcyB3aWxsIGJl
Y29tZSBpcnJlbGV2YW50IGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzE2NSBpcyByZXNvbHZlZC4KLSAgICAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzV29ya2VyQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3Qp
OwotICAgICAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPm5vbkNhY2hlUmVxdWVzdEluRmxpZ2h0
KG1fdXJsKTsKLSAgICAgICAgICAgIG1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkKIHsK
ICAgICAvLyBpbnRlcm5hbEFib3J0KCkgY2FsbHMgZHJvcFByb3RlY3Rpb24oKSwgd2hpY2ggbWF5
IHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlLgpAQCAtNzExLDcgKzUyNiw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmFib3J0KCkKIAogICAgIC8vIENsZWFyIGhlYWRlcnMgYXMgcmVxdWlyZWQg
YnkgdGhlIHNwZWMKICAgICBtX3JlcXVlc3RIZWFkZXJzLmNsZWFyKCk7Ci0gICAgCisKICAgICBp
ZiAoKG1fc3RhdGUgPD0gT1BFTkVEICYmICFzZW5kRmxhZykgfHwgbV9zdGF0ZSA9PSBET05FKQog
ICAgICAgICBtX3N0YXRlID0gVU5TRU5UOwogICAgIGVsc2UgewpAQCAtNzk0LDcgKzYwOSw3IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0RXJyb3IoKQogICAgIH0KIH0KIAotdm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAgICAgICAgCit2b2lkIFhNTEh0dHBSZXF1ZXN0
Ojpkcm9wUHJvdGVjdGlvbigpCiB7CiAjaWYgVVNFKEpTQykKICAgICAvLyBUaGUgWEhSIG9iamVj
dCBpdHNlbGYgaG9sZHMgb24gdG8gdGhlIHJlc3BvbnNlVGV4dCwgYW5kCkBAIC04NTQsNyArNjY5
LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjbwogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHBhaXI8SFRUUEhlYWRlck1hcDo6
aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVl
KTsgCisgICAgcGFpcjxIVFRQSGVhZGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9y
ZXF1ZXN0SGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkK
ICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgKz0gIiwgIiArIHZhbHVlOwogfQpAQCAtOTM5
LDcgKzc1NCw3IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VNSU1FVHlwZSgKICAg
ICB9CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgbWltZVR5cGUgPSAidGV4
dC94bWwiOwotICAgIAorCiAgICAgcmV0dXJuIG1pbWVUeXBlOwogfQogCkBAIC05ODEsNyArNzk2
LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbChjb25zdCBSZXNvdQogICAgICAgICBj
YWNoZSgpLT5sb2FkZXIoKS0+bm9uQ2FjaGVSZXF1ZXN0Q29tcGxldGUobV91cmwpOwogICAgICAg
ICBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3QgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBpbiBhbiBlcnJvciBzdGF0ZSwgZm9yIGluc3RhbmNlIHdl
IGNhbGxlZCBhYm9ydCgpLCBiYWlsIG91dCBlYXJseS4KICAgICBpZiAobV9lcnJvcikKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTAxMSwxMSArODI2LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
RmluaXNoTG9hZGluZyh1bgogICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9pblByZWZsaWdodCkgewotICAgICAgICBkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAobV9zdGF0ZSA8IEhFQURFUlNf
UkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0YXRlKEhFQURFUlNfUkVDRUlWRUQpOwogCkBAIC0x
MDM1LDE5ICs4NDUsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKHVu
CiAgICAgICAgIGRyb3BQcm90ZWN0aW9uKCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
ZEZpbmlzaExvYWRpbmdQcmVmbGlnaHQoKQotewotICAgIEFTU0VSVChtX2luUHJlZmxpZ2h0KTsK
LSAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOwotCi0gICAgLy8gRklYTUU6IHRoaXMg
Y2FuIHByb2JhYmx5IGJlIG1vdmVkIHRvIGRpZFJlY2VpdmVSZXNwb25zZVByZWZsaWdodC4KLSAg
ICBpZiAobV9hc3luYykKLSAgICAgICAgaGFuZGxlQXN5bmNocm9ub3VzUHJlZmxpZ2h0UmVzdWx0
KCk7Ci0KLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOwotfQotCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQog
ewogICAgIGlmICghbV91cGxvYWQpCkBAIC0xMDY1LDQ1ICs4NjIsMTIgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZGlkU2VuZERhdGEodW5zaWduZQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAg
aWYgKG1faW5QcmVmbGlnaHQpIHsKLSAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0
KHJlc3BvbnNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zYW1lT3Jp
Z2luUmVxdWVzdCkgewotICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNw
b25zZSwgbV9pbmNsdWRlQ3JlZGVudGlhbHMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtFcnJvcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNl
OwogICAgIG1fcmVzcG9uc2VFbmNvZGluZyA9IGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZSht
X21pbWVUeXBlT3ZlcnJpZGUpOwogICAgIGlmIChtX3Jlc3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgp
KQogICAgICAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1l
KCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVSZXNwb25zZVByZWZsaWdo
dChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBBU1NFUlQobV9pblBy
ZWZsaWdodCk7Ci0gICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKLQotICAgIGlmICgh
cGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNlLCBtX2luY2x1ZGVDcmVkZW50aWFscywg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpKSkgewotICAgICAgICBu
ZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93blB0cjxDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4gcHJlZmxpZ2h0UmVzdWx0KG5ldyBDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbShtX2luY2x1ZGVDcmVkZW50aWFscykpOwot
ICAgIGlmICghcHJlZmxpZ2h0UmVzdWx0LT5wYXJzZShyZXNwb25zZSkKLSAgICAgICAgfHwgIXBy
ZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9tZXRob2QpCi0gICAgICAg
IHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luSGVhZGVycyhtX3JlcXVlc3RI
ZWFkZXJzKSkgewotICAgICAgICBuZXR3b3JrRXJyb3IoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFwcGVu
ZEVudHJ5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSwgbV91cmwsIHByZWZsaWdodFJlc3VsdC5yZWxlYXNlKCkpOwotfQotCiB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgZmFpbHVyZVJlc3BvbnNlKQogewogICAgIG1fcmVzcG9uc2UgPSBmYWls
dXJlUmVzcG9uc2U7CkBAIC0xMTExLDEyICs4NzUsMTIgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZUF1dGhlbnRpYwogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQogewotICAgIGlmIChtX2luUHJlZmxpZ2h0IHx8
IG1fZXJyb3IpCisgICAgaWYgKG1fZXJyb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X3N0YXRlIDwgSEVBREVSU19SRUNFSVZFRCkKICAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVSU19S
RUNFSVZFRCk7Ci0gIAorCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgaWYgKCFtX3Jl
c3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9yZXNwb25zZUVuY29kaW5nKTsK
QEAgLTEyMTAsNyArOTc0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0Y2hMb2FkU3Rh
cnRFdgogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQobG9uZyBs
b25nIGV4cGVjdGVkTGVuZ3RoKQogewotICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50KG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkucHJvZ3Jlc3NF
dmVudCwgZXhwZWN0ZWRMZW5ndGggJiYgbV9yZWNlaXZlZExlbmd0aCA8PSBleHBlY3RlZExlbmd0
aCwgCisgICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQobV9vblByb2dyZXNz
TGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBleHBlY3RlZExlbmd0
aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2VpdmVk
TGVuZ3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7CiB9CiAKQEAg
LTEyMzUsNCArOTk5LDQgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogWE1MSHR0cFJlcXVlc3Q6
OgogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
IH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZSAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNDcwNzQpCisrKyBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIFhNTEh0dHBSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
LSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogCkBAIC0xMzUs
MTAgKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENo
ZWNrKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxh
dGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKLSAgICAvLyBTcGVjaWFsIHZlcnNpb25z
IGZvciB0aGUgcHJlZmxpZ2h0Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2VQcmVmbGlnaHQo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ1ByZWZs
aWdodCgpOwotCiAgICAgdm9pZCB1cGRhdGVBbmREaXNwYXRjaE9uUHJvZ3Jlc3ModW5zaWduZWQg
aW50IGxlbik7CiAKICAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0OwpAQCAtMTU5
LDE2ICsxNTUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgIHZvaWQgbWFrZVNhbWVPcmlnaW5SZXF1ZXN0KEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgdm9pZCBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxp
Z2h0KEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGhhbmRsZUFzeW5jaHJvbm91c1ByZWZsaWdo
dFJlc3VsdCgpOwotCi0gICAgdm9pZCBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkoUmVzb3VyY2VS
ZXF1ZXN0JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgbG9hZFJlcXVlc3RBc3luY2hyb25v
dXNseShSZXNvdXJjZVJlcXVlc3QmKTsKLQogICAgIHZvaWQgZ2VuZXJpY0Vycm9yKCk7CiAgICAg
dm9pZCBuZXR3b3JrRXJyb3IoKTsKICAgICB2b2lkIGFib3J0RXJyb3IoKTsKQEAgLTIyMywxMyAr
MjA5LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VwbG9hZENvbXBsZXRlOwogCiAgICAgYm9v
bCBtX3NhbWVPcmlnaW5SZXF1ZXN0OwotICAgIGJvb2wgbV9hbGxvd0FjY2VzczsKLSAgICBib29s
IG1faW5QcmVmbGlnaHQ7CiAgICAgYm9vbCBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVlc3Q7CiAK
ICAgICAvLyBVc2VkIGZvciBvbnByb2dyZXNzIHRyYWNraW5nCiAgICAgbG9uZyBsb25nIG1fcmVj
ZWl2ZWRMZW5ndGg7Ci0gICAgCisKICAgICB1bnNpZ25lZCBtX2xhc3RTZW5kTGluZU51bWJlcjsK
ICAgICBTdHJpbmcgbV9sYXN0U2VuZFVSTDsKICAgICBFeGNlcHRpb25Db2RlIG1fZXhjZXB0aW9u
Q29kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34797</attachid>
            <date>2009-08-13 16:51:48 -0700</date>
            <delta_ts>2009-08-13 20:10:40 -0700</delta_ts>
            <desc>Newer patch</desc>
            <filename>bug28134.patch</filename>
            <type>text/plain</type>
            <size>56945</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMTMgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQlVH
IDI4MTM0OiBNb3ZlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgQWNjZXNzIENvbnRyb2wgZnJvbSBY
TUxIdHRwUmVxdWVzdCB0byBUaHJlYWRhYmxlRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzNAorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhZGRlZCBzaW5jZSBBY2Nlc3MgQ29udHJvbCB3YXMgYWxyZWFkeSB3ZWxsIHRlc3Rl
ZCBhbmQgdGhpcyBpcyBhIHB1cmUgcmVmYWN0b3IuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogTW92ZSBhIGxvdCBvZiB0aGUgYWNjZXNzIGNvbnRyb2wg
Y29kZSBmcm9tIFhIUiBpbiwgcHJlc2VydmluZyBpdHMKKyAgICAgICAgYmFzaWMgc3RyYXRlZ3ku
IEFsc28sIG1vZGlmeSB0aGUgc3luY2hyb25vdXMgcGF0aCB0byBub3QgYmUgYSBzcGVjaWFsIGNh
c2UsIGJ1dCByZXVzZSBtb3JlIG9mIHRoZSBhc3luYworICAgICAgICBwYXRoLgorCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBHbyB0aHJvdWdoIHRoZSBhc3luYyBwYXRoIGFuZCBwYXNzIGFkZGl0aW9uYWwgZmxh
Z3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6
IEdyb3VwIGVudW0gcGFyYW1zIGludG8gYW4gb3B0aW9ucyBzdHJ1Y3QuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KTogQnJvdWdodCBtb3N0bHkgZnJvbSBYSFIu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6IEhhbmRsZSBwcmVm
bGlnaHQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6IFByZWZsaWdodCBoYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6IENv
bW1vbiByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhc3luYy9zeW5jLgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDogR3JvdXAgZW51bSBwYXJhbXMgaW50
byBhbiBvcHRpb25zIHN0cnVjdC4KKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6VGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6RGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBBbGxv
dyBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB0byBiZSBjb3BpZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3JvdXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3Jv
dXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hy
b25vdXNseSk6IE1vcmUgZW51bS0+c3RydWN0IGdyb3VwaW5nLgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6IFJlbW92ZSBhbGwgdGhlIGFjY2VzcyBjb250cm9sIGNvZGUgYW5kIHNv
bWUgc3VwcG9ydGluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpY
TUxIdHRwUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZVJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuaDogRGl0dG8uCisKIDIwMDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9j
a0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA0
NzI1MykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuaCIKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5j
bHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgiCisjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNDMsNjEg
KzQ0LDEwNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBj
bGllbnQsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQordm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQmIGNsaWVudCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgYm9vbCBzYW1lT3JpZ2luUmVxdWVzdCA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0g
ICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwot
ICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgaWRl
bnRpZmllciA9IGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRh
KTsKLQotICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJk
YXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgotICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCBy
ZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCi0gICAgaWYg
KCFlcnJvci5pc051bGwoKSAmJiAhcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpICYmIHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgPD0gMCkgewotICAgICAgICBjbGllbnQuZGlkRmFpbChlcnJv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBh
bG9uZyB3aXRoIHRoZSBvbmUgaW4gd2lsbFNlbmRSZXF1ZXN0IGlzIHNwZWNpZmljIHRvIHhociBh
bmQKLSAgICAvLyBzaG91bGQgYmUgbWFkZSBtb3JlIGdlbmVyaWMuCi0gICAgaWYgKHNhbWVPcmln
aW5SZXF1ZXN0ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNw
b25zZS51cmwoKSkpIHsKLSAgICAgICAgY2xpZW50LmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlKHJl
c3BvbnNlKTsKLQotICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEuZGF0YSgpKTsKLSAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNp
emUoKSk7Ci0gICAgY2xpZW50LmRpZFJlY2VpdmVEYXRhKGJ5dGVzLCBsZW4pOwotCi0gICAgY2xp
ZW50LmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CisgICAgLy8gVGhlIGxvYWRlciB3aWxs
IGJlIGRlbGV0ZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgorICAgIFJlZlB0cjxE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIoZG9jdW1lbnQsICZjbGllbnQsIExvYWRTeW5jaHJvbm91c2x5LCByZXF1
ZXN0LCBvcHRpb25zKSk7CisgICAgQVNTRVJUKGxvYWRlci0+aGFzT25lUmVmKCkpOwogfQogCi1Q
YXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBj
bGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxs
YmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFs
cyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5KQorUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewotICAgIEFTU0VSVChk
b2N1bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0g
YWRvcHRSZWYobmV3IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihkb2N1bWVudCwgY2xpZW50LCBy
ZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxz
LCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KSk7CisgICAgUmVmUHRyPERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cihkb2N1bWVudCwgY2xpZW50LCBMb2FkQXN5bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMp
KTsKICAgICBpZiAoIWxvYWRlci0+bV9sb2FkZXIpCiAgICAgICAgIGxvYWRlciA9IDA7CiAgICAg
cmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKLURvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRD
YWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xp
Y3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCogY2xpZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmIG9wdGlvbnMpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2RvY3VtZW50KGRv
Y3VtZW50KQotICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxz
ID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAg
ICAsIG1fc2FtZU9yaWdpblJlcXVlc3QoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QocmVxdWVzdC51cmwoKSkpCi0gICAgLCBtX2RlbnlDcm9zc09yaWdpblJlZGlyZWN0KGNy
b3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgPT0gRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QpCisgICAg
LCBtX2FzeW5jKGJsb2NraW5nQmVoYXZpb3IgPT0gTG9hZEFzeW5jaHJvbm91c2x5KQogewogICAg
IEFTU0VSVChkb2N1bWVudCk7CiAgICAgQVNTRVJUKGNsaWVudCk7Ci0gICAgQVNTRVJUKHN0b3Jl
ZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfHwgc3RvcmVkQ3JlZGVudGlh
bHMgPT0gRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKLSAgICBBU1NFUlQoY3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdCB8fCBjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5ID09IEFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdCk7Ci0gICAgbV9sb2Fk
ZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBmYWxzZSwgY2FsbGJhY2tzU2V0dGluZyA9PSBTZW5kTG9hZENhbGxiYWNrcywgY29u
dGVudFNuaWZmID09IFNuaWZmQ29udGVudCk7CisKKyAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0g
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVxdWVzdC51cmwoKSk7Cisg
ICAgaWYgKG1fc2FtZU9yaWdpblJlcXVlc3QpIHsKKyAgICAgICAgYm9vbCBza2lwQ2FuTG9hZENo
ZWNrID0gZmFsc2U7CisgICAgICAgIGxvYWRSZXF1ZXN0KHJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hl
Y2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX29wdGlvbnMuY3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNl
RXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fb3B0aW9ucy5m
b3JjZUNyb3NzT3JpZ2luUHJlZmxpZ2h0ICYmIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1
ZXN0KHJlcXVlc3QuaHR0cE1ldGhvZCgpLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisg
ICAgICAgIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QocmVxdWVzdCk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fYWN0dWFsUmVxdWVzdC5zZXQobmV3IFJlc291cmNlUmVxdWVzdChy
ZXF1ZXN0KSk7CisgICAgICAgIG1fYWN0dWFsUmVxdWVzdC0+c2V0QWxsb3dIVFRQQ29va2llcyht
X29wdGlvbnMuYWxsb3dDcmVkZW50aWFscyk7CisKKyAgICAgICAgaWYgKENyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVmbGlnaHQoZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIHJlcXVlc3QudXJsKCksIG1fb3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzLCByZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVxdWVzdC5odHRwSGVhZGVyRmll
bGRzKCkpKQorICAgICAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChyZXF1
ZXN0KTsKKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICBBU1NFUlQoaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QocmVxdWVz
dC5odHRwTWV0aG9kKCksIHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSk7CisKKyAgICAvLyBD
cm9zcy1vcmlnaW4gcmVxdWVzdHMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgSFRUUC4gV2Ugd291bGQg
Y2F0Y2ggdGhpcyB3aGVuIGNoZWNraW5nIHJlc3BvbnNlIGhlYWRlcnMgbGF0ZXIsIGJ1dCB0aGVy
ZSBpcyBubyByZWFzb24gdG8gc2VuZCBhIHJlcXVlc3QgdGhhdCdzIGd1YXJhbnRlZWQgdG8gYmUg
ZGVuaWVkLgorICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKSB7
CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJyb3IoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgcGFzc2VkIHJlcXVlc3Qg
c28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHNvbWUgZGV0YWlscy4KKyAgICBSZXNvdXJjZVJlcXVlc3Qg
Y3Jvc3NPcmlnaW5SZXF1ZXN0KHJlcXVlc3QpOworICAgIGNyb3NzT3JpZ2luUmVxdWVzdC5yZW1v
dmVDcmVkZW50aWFscygpOworICAgIGNyb3NzT3JpZ2luUmVxdWVzdC5zZXRBbGxvd0hUVFBDb29r
aWVzKG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKKyAgICBjcm9zc09yaWdpblJlcXVlc3Qu
c2V0SFRUUE9yaWdpbihtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsK
KworICAgIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlOworICAgIGxvYWRSZXF1ZXN0KGNy
b3NzT3JpZ2luUmVxdWVzdCwgc2tpcENhbkxvYWRDaGVjayk7Cit9CisKK3ZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdo
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0
IHByZWZsaWdodFJlcXVlc3QocmVxdWVzdC51cmwoKSk7CisgICAgcHJlZmxpZ2h0UmVxdWVzdC5y
ZW1vdmVDcmVkZW50aWFscygpOworICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUE9yaWdpbiht
X2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKyAgICBwcmVmbGlnaHRS
ZXF1ZXN0LnNldEFsbG93SFRUUENvb2tpZXMobV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOwor
ICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiT1BUSU9OUyIpOworICAgIHByZWZs
aWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1l
dGhvZCIsIHJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKKworICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAm
IHJlcXVlc3RIZWFkZXJGaWVsZHMgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKTsKKworICAg
IGlmIChyZXF1ZXN0SGVhZGVyRmllbGRzLnNpemUoKSA+IDApIHsKKyAgICAgICAgVmVjdG9yPFVD
aGFyPiBoZWFkZXJCdWZmZXI7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcmVxdWVzdEhlYWRlckZpZWxkcy5iZWdpbigpOworICAgICAgICBhcHBlbmQoaGVhZGVy
QnVmZmVyLCBpdC0+Zmlyc3QpOworICAgICAgICArK2l0OworCisgICAgICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJGaWVsZHMuZW5kKCk7CisgICAg
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5h
cHBlbmQoJywnKTsKKyAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBlbmQoJyAnKTsKKyAgICAg
ICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgIH0KKworICAg
ICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wt
UmVxdWVzdC1IZWFkZXJzIiwgU3RyaW5nOjphZG9wdChoZWFkZXJCdWZmZXIpKTsKKyAgICAgICAg
cHJlZmxpZ2h0UmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKHJlcXVlc3RIZWFkZXJGaWVsZHMp
OworICAgIH0KKworICAgIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlOworICAgIGxvYWRS
ZXF1ZXN0KHByZWZsaWdodFJlcXVlc3QsIHNraXBDYW5Mb2FkQ2hlY2spOwogfQogCiBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6On5Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIoKQpAQCAtMTIzLDcg
KzE2OSw3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjp3aWxsU2VuZFIKICAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKIAogICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3QgY29ycmVjdGx5
IGV2ZW4gZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KLSAgICBpZiAobV9kZW55Q3Jvc3NPcmln
aW5SZWRpcmVjdCAmJiAhbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChy
ZXF1ZXN0LnVybCgpKSkgeworICAgIGlmICghbV9vcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5SZWRp
cmVjdCAmJiAhbV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXF1ZXN0
LnVybCgpKSkgewogICAgICAgICBSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBwcm90
ZWN0KHRoaXMpOwogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKICAg
ICAgICAgcmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgpOwpAQCAtMTQzLDcgKzE4OSwzMSBAQCB2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2CiAgICAgQVNTRVJUKG1fY2xp
ZW50KTsKICAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKIAot
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIGlmIChtX2Fj
dHVhbFJlcXVlc3QpIHsKKyAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9sQ2hlY2socmVz
cG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzLCBtX2RvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpKSkgeworICAgICAgICAgICAgcHJlZmxpZ2h0RmFpbHVyZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3duUHRyPENyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGVJdGVtPiBwcmVmbGlnaHRSZXN1bHQobmV3IENyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGVJdGVtKG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKSk7CisgICAgICAgIGlm
ICghcHJlZmxpZ2h0UmVzdWx0LT5wYXJzZShyZXNwb25zZSkKKyAgICAgICAgICAgIHx8ICFwcmVm
bGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luTWV0aG9kKG1fYWN0dWFsUmVxdWVzdC0+aHR0
cE1ldGhvZCgpKQorICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NP
cmlnaW5IZWFkZXJzKG1fYWN0dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkgeworICAg
ICAgICAgICAgcHJlZmxpZ2h0RmFpbHVyZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCku
YXBwZW5kRW50cnkobV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9h
Y3R1YWxSZXF1ZXN0LT51cmwoKSwgcHJlZmxpZ2h0UmVzdWx0LnJlbGVhc2UoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KSB7CisgICAgICAgICAgICBp
ZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3Jl
ZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKSB7CisgICAgICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCkBAIC0xNTgsNyArMjI4LDE2IEBA
IHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gKIHsKICAgICBBU1NFUlQo
bG9hZGVyID09IG1fbG9hZGVyKTsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIG1fY2xpZW50
LT5kaWRGaW5pc2hMb2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKKyAgICBkaWRGaW5pc2hM
b2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQorewor
ICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5S
ZXF1ZXN0KTsKKyAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOworICAgIH0gZWxzZQorICAgICAg
ICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKIH0KIAogdm9pZCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC0xNzQsNyArMjUzLDcgQEAgYm9vbCBEb2N1
bWVudFRocmVhZGFibGVMb2FkZXI6OmdldFNob3VsZAogewogICAgIEFTU0VSVF9VTlVTRUQobG9h
ZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCi0gICAgaWYgKCFtX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHMpIHsKKyAgICBpZiAoIW1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKSB7CiAgICAgICAg
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTIwMCw0ICsyNzksNjEgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OnJlY2VpdmVkQwogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DYW5j
ZWxsYXRpb24oY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpKTsKIH0KIAordm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OnByZWZsaWdodFN1Y2Nlc3MoKQoreworICAgIE93blB0cjxSZXNv
dXJjZVJlcXVlc3Q+IGFjdHVhbFJlcXVlc3Q7CisgICAgYWN0dWFsUmVxdWVzdC5zd2FwKG1fYWN0
dWFsUmVxdWVzdCk7CisKKyAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSB0cnVlOyAgLy8gb2sg
dG8gc2tpcCBsb2FkIGNoZWNrIHNpbmNlIHdlIGFscmVhZHkgYXNrZWQgYWJvdXQgdGhlIHByZWZs
aWdodCByZXF1ZXN0CisgICAgbG9hZFJlcXVlc3QoKmFjdHVhbFJlcXVlc3QsIHNraXBDYW5Mb2Fk
Q2hlY2spOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFp
bHVyZSgpCit7CisgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKK30KKwor
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBza2lwQ2FuTG9hZENoZWNrKQoreworICAgIGlmIChtX2Fz
eW5jKSB7CisgICAgICAgIC8vIERvbid0IHNuaWZmIGNvbnRlbnQgb3Igc2VuZCBsb2FkIGNhbGxi
YWNrcyBmb3IgdGhlIHByZWZsaWdodCByZXF1ZXN0LgorICAgICAgICBib29sIHNlbmRMb2FkQ2Fs
bGJhY2tzID0gbV9vcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzICYmICFtX2FjdHVhbFJlcXVlc3Q7
CisgICAgICAgIGJvb2wgc25pZmZDb250ZW50ID0gbV9vcHRpb25zLnNuaWZmQ29udGVudCAmJiAh
bV9hY3R1YWxSZXF1ZXN0OworICAgICAgICBtX2xvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpj
cmVhdGUobV9kb2N1bWVudC0+ZnJhbWUoKSwgdGhpcywgcmVxdWVzdCwgc2tpcENhbkxvYWRDaGVj
aywgc2VuZExvYWRDYWxsYmFja3MsIHNuaWZmQ29udGVudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gRklYTUU6IFRocmVhZGFibGVMb2FkZXJPcHRpb25zLnNuaWZmQ29u
dGVudCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cy4KKyAgICBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRp
YWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFs
czsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Cisg
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsKKyAgICBpZiAo
bV9kb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZy
YW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3Jl
ZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworCisgICAgLy8gTm8gZXhjZXB0
aW9uIGZvciBmaWxlOi8vLyByZXNvdXJjZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDk2MjI5OD4u
CisgICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhbiBIVFRQIHJlc3BvbnNlLCB0aGVuIGl0IHdhc24n
dCBhIG5ldHdvcmsgZXJyb3IgaW4gZmFjdC4KKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmICFy
ZXF1ZXN0LnVybCgpLmlzTG9jYWxGaWxlKCkgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8
PSAwKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKGVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGFsb25nIHdpdGggdGhlIG9uZSBp
biB3aWxsU2VuZFJlcXVlc3QgaXMgc3BlY2lmaWMgdG8geGhyIGFuZAorICAgIC8vIHNob3VsZCBi
ZSBtYWRlIG1vcmUgZ2VuZXJpYy4KKyAgICBpZiAobV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhbV9k
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNwb25zZS51cmwoKSkpIHsK
KyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworCisgICAg
Y29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkp
OworICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKKyAgICBkaWRS
ZWNlaXZlRGF0YSgwLCBieXRlcywgbGVuKTsKKworICAgIGRpZEZpbmlzaExvYWRpbmcoaWRlbnRp
Zmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTQ0LDggKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXIsIHByaXZh
dGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgU3RvcmVkQ3JlZGVudGlhbHMpOwot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGNyZWF0
ZShEb2N1bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9z
c09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNl
U3luY2hyb25vdXNseShEb2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShEb2N1
bWVudCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwogICAgICAgICB2aXJ0dWFsIH5Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CkBA
IC01OCw3ICs1OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZlRocmVhZGFibGVMb2FkZXIoKSB7IGRlcmVmKCk7IH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50
U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAg
ICAgICAgZW51bSBCbG9ja2luZ0JlaGF2aW9yIHsKKyAgICAgICAgICAgIExvYWRTeW5jaHJvbm91
c2x5LAorICAgICAgICAgICAgTG9hZEFzeW5jaHJvbm91c2x5CisgICAgICAgIH07CisKKyAgICAg
ICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCosIEJsb2NraW5nQmVoYXZpb3IgYmxvY2tpbmdCZWhhdmlvciwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpOworCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCk7CiAKQEAgLTcxLDEyICs3OCwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogCisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9h
ZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICB2b2lkIG1ha2VTaW1wbGVD
cm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsK
KyAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOworICAgICAgICB2b2lkIHByZWZsaWdodFN1
Y2Nlc3MoKTsKKyAgICAgICAgdm9pZCBwcmVmbGlnaHRGYWlsdXJlKCk7CisKKyAgICAgICAgdm9p
ZCBsb2FkUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNraXBDYW5Mb2FkQ2hl
Y2spOworCiAgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAg
ICAgIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAgICAgICBEb2N1bWVudCog
bV9kb2N1bWVudDsKLSAgICAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAg
ICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICAgICAgYm9vbCBtX3Nh
bWVPcmlnaW5SZXF1ZXN0OwotICAgICAgICBib29sIG1fZGVueUNyb3NzT3JpZ2luUmVkaXJlY3Q7
CisgICAgICAgIGJvb2wgbV9hc3luYzsKKyAgICAgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4g
bV9hY3R1YWxSZXF1ZXN0OyAgLy8gbm9uLW51bGwgZHVyaW5nIEFjY2VzcyBDb250cm9sIHByZWZs
aWdodCBjaGVja3MKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNDcyNTMpCisrKyBXZWJDb3JlL2xv
YWRlci9UaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMzMgKzQwLDMz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVy
PiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNv
bnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3Jp
Z2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkgCitQYXNzUmVmUHRy
PFRocmVhZGFibGVMb2FkZXI+IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMm
IG9wdGlvbnMpIAogewogICAgIEFTU0VSVChjbGllbnQpOwogICAgIEFTU0VSVChjb250ZXh0KTsK
IAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIGNsaWVudCwgV29ya2VyUnVuTG9vcDo6ZGVm
YXVsdE1vZGUoKSwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9y
ZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIHJldHVy
biBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4
dCo+KGNvbnRleHQpLCBjbGllbnQsIFdvcmtlclJ1bkxvb3A6OmRlZmF1bHRNb2RlKCksIHJlcXVl
c3QsIG9wdGlvbnMpOwogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQogCiAgICAgQVNTRVJUKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIGNsaWVudCwgcmVxdWVz
dCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jv
c3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgcmV0dXJuIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIGNsaWVudCwgcmVx
dWVzdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgU3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMpCit2b2lkIFRocmVhZGFibGVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
JiBjbGllbnQsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewogICAg
IEFTU0VSVChjb250ZXh0KTsKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIGlmIChjb250ZXh0
LT5pc1dvcmtlckNvbnRleHQoKSkgewotICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250
ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBzdG9yZWRDcmVkZW50aWFscywgRGVueUNyb3NzT3JpZ2lu
UmVkaXJlY3QpOworICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KSwgcmVxdWVz
dCwgY2xpZW50LCBvcHRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKIAogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAg
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCByZXF1ZXN0LCBjbGllbnQsIHN0b3JlZENyZWRl
bnRpYWxzKTsKKyAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50
LCBvcHRpb25zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvVGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Ro
cmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNDcyNTMpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0Myw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNz
IFRocmVhZGFibGVMb2FkZXJDbGllbnQ7CiAKLSAgICBlbnVtIExvYWRDYWxsYmFja3MgewotICAg
ICAgICBTZW5kTG9hZENhbGxiYWNrcywKLSAgICAgICAgRG9Ob3RTZW5kTG9hZENhbGxiYWNrcwot
ICAgIH07Ci0KLSAgICBlbnVtIENvbnRlbnRTbmlmZiB7Ci0gICAgICAgIFNuaWZmQ29udGVudCwK
LSAgICAgICAgRG9Ob3RTbmlmZkNvbnRlbnQKLSAgICB9OwotCiAgICAgZW51bSBTdG9yZWRDcmVk
ZW50aWFscyB7CiAgICAgICAgIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsCiAgICAgICAgIERvTm90
QWxsb3dTdG9yZWRDcmVkZW50aWFscwpAQCAtNjIsMTMgKzUyLDIzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QsCiAgICAgICAgIEFsbG93Q3Jv
c3NPcmlnaW5SZWRpcmVjdAogICAgIH07CisgICAgCisgICAgc3RydWN0IFRocmVhZGFibGVMb2Fk
ZXJPcHRpb25zIHsKKyAgICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zKCkgOiBzZW5kTG9hZENh
bGxiYWNrcyhmYWxzZSksIHNuaWZmQ29udGVudChmYWxzZSksIGNyb3NzT3JpZ2luQWNjZXNzQ29u
dHJvbChmYWxzZSksIGFsbG93Q3JlZGVudGlhbHMoZmFsc2UpLCBmb3JjZUNyb3NzT3JpZ2luUHJl
ZmxpZ2h0KGZhbHNlKSwgYWxsb3dDcm9zc09yaWdpblJlZGlyZWN0KGZhbHNlKSB7IH0KKyAgICAg
IGJvb2wgc2VuZExvYWRDYWxsYmFja3M7CisgICAgICBib29sIHNuaWZmQ29udGVudDsKKyAgICAg
IGJvb2wgY3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sOworICAgICAgYm9vbCBhbGxvd0NyZWRlbnRp
YWxzOworICAgICAgYm9vbCBmb3JjZUNyb3NzT3JpZ2luUHJlZmxpZ2h0OworICAgICAgYm9vbCBh
bGxvd0Nyb3NzT3JpZ2luUmVkaXJlY3Q7CisgICAgfTsKIAogICAgIC8vIFVzZWZ1bCBmb3IgZG9p
bmcgbG9hZGVyIG9wZXJhdGlvbnMgZnJvbSBhbnkgdGhyZWFkIChub3QgdGhyZWFkc2FmZSwgCiAg
ICAgLy8ganVzdCBhYmxlIHRvIHJ1biBvbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIG1haW4gdGhy
ZWFkKS4KICAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQmLCBTdG9yZWRDcmVkZW50aWFscyk7Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIExvYWRD
YWxsYmFja3MsIENvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVk
aXJlY3RQb2xpY3kpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsKCkgPSAwOwogICAgICAgICB2b2lkIHJlZigpIHsgcmVmVGhyZWFkYWJs
ZUxvYWRlcigpOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVy
LmNwcAkocmV2aXNpb24gNDcyNTMpCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgbG9hZFJlc291cmNlU3luY2hyb25vdXNseU1v
ZGVbXSA9ICJsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5TW9kZSI7CiAKLVdvcmtlclRocmVhZGFi
bGVMb2FkZXI6OldvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tN
b2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRDYWxsYmFja3MgY2FsbGJh
Y2tzU2V0dGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3Jl
ZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBv
bGljeSkKK1dvcmtlclRocmVhZGFibGVMb2FkZXI6OldvcmtlclRocmVhZGFibGVMb2FkZXIoV29y
a2VyQ29udGV4dCogd29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50
LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogICAgIDogbV93b3JrZXJD
b250ZXh0KHdvcmtlckNvbnRleHQpCiAgICAgLCBtX3dvcmtlckNsaWVudFdyYXBwZXIoVGhyZWFk
YWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmNyZWF0ZShjbGllbnQpKQotICAgICwgbV9icmlkZ2Uo
KihuZXcgTWFpblRocmVhZEJyaWRnZShtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29u
dGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCksIHRhc2tNb2RlLCByZXF1ZXN0LCBj
YWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5KSkpCisgICAgLCBtX2JyaWRnZSgqKG5ldyBNYWluVGhyZWFkQnJp
ZGdlKG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29y
a2VyTG9hZGVyUHJveHkoKSwgdGFza01vZGUsIHJlcXVlc3QsIG9wdGlvbnMpKSkKIHsKIH0KIApA
QCAtNjYsNyArNjUsNyBAQCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjp+V29ya2VyVGhyZWFkYWJs
CiAgICAgbV9icmlkZ2UuZGVzdHJveSgpOwogfQogCi12b2lkIFdvcmtlclRocmVhZGFibGVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
JiBjbGllbnQsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpCit2b2lkIFdvcmtlclRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50JiBjbGllbnQsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRp
b25zKQogewogICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+cnVuTG9vcCgpOwogCkBAIC03NCw5ICs3Myw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJs
ZUxvYWRlcjo6bG9hZFJlc291cmMKICAgICBTdHJpbmcgbW9kZSA9IGxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHlNb2RlOwogICAgIG1vZGUuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHJ1bkxvb3AuY3Jl
YXRlVW5pcXVlSWQoKSkpOwogCi0gICAgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiA9IHJlcXVl
c3QudXJsKCkuaXNMb2NhbEZpbGUoKSA/IFNuaWZmQ29udGVudCA6IERvTm90U25pZmZDb250ZW50
OwotICAgIFJlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyOjpjcmVhdGUod29ya2VyQ29udGV4dCwgJmNsaWVudCwgbW9kZSwgcmVxdWVz
dCwgRG9Ob3RTZW5kTG9hZENhbGxiYWNrcywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFs
cywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7Ci0KKyAgICBSZWZQdHI8V29ya2VyVGhyZWFk
YWJsZUxvYWRlcj4gbG9hZGVyID0gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHdvcmtl
ckNvbnRleHQsICZjbGllbnQsIG1vZGUsIHJlcXVlc3QsIG9wdGlvbnMpOwogICAgIE1lc3NhZ2VR
dWV1ZVdhaXRSZXN1bHQgcmVzdWx0ID0gTWVzc2FnZVF1ZXVlTWVzc2FnZVJlY2VpdmVkOwogICAg
IHdoaWxlICghbG9hZGVyLT5kb25lKCkgJiYgcmVzdWx0ICE9IE1lc3NhZ2VRdWV1ZVRlcm1pbmF0
ZWQpCiAgICAgICAgIHJlc3VsdCA9IHJ1bkxvb3AucnVuSW5Nb2RlKHdvcmtlckNvbnRleHQsIG1v
ZGUpOwpAQCAtOTEsMjEgKzg4LDIwIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y2Fu
Y2VsKCkKIH0KIAogV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFp
blRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyLCBXb3JrZXJMb2FkZXJQcm94eSYgbG9hZGVyUHJveHksIGNvbnN0
IFN0cmluZyYgdGFza01vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9h
ZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBT
dG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3NPcmlnaW5SZWRpcmVj
dFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogICAg
IDogbV93b3JrZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCiAgICAgLCBtX2xv
YWRlclByb3h5KGxvYWRlclByb3h5KQogICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZS5jb3B5KCkp
CiB7CiAgICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7Ci0gICAgbV9sb2Fk
ZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJy
aWRnZTo6bWFpblRocmVhZENyZWF0ZUxvYWRlciwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzU2V0
dGluZywgY29udGVudFNuaWZmLCBzdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVj
dFBvbGljeSkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxs
YmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIsIHRoaXMs
IHJlcXVlc3QsIG9wdGlvbnMpKTsKIH0KIAogV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRo
cmVhZEJyaWRnZTo6fk1haW5UaHJlYWRCcmlkZ2UoKQogewogfQogCi12b2lkIFdvcmtlclRocmVh
ZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRocmVhZEJyaWRnZSogdGhpc1B0ciwg
YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSwgTG9h
ZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBT
dG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBv
bGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIsIGF1dG9fcHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEsIFRocmVhZGFibGVM
b2FkZXJPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKQEAgLTExNyw3ICsxMTMsNyBAQCB2b2lk
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCCiAgICAgLy8gRklYTUU6IElmIHRo
ZSBhIHNpdGUgcmVxdWVzdHMgYSBsb2NhbCByZXNvdXJjZSwgdGhlbiB0aGlzIHdpbGwgcmV0dXJu
IGEgbm9uLXplcm8gdmFsdWUgYnV0IHRoZSBzeW5jIHBhdGgKICAgICAvLyB3aWxsIHJldHVybiBh
IDAgdmFsdWUuICBFaXRoZXIgdGhpcyBzaG91bGQgcmV0dXJuIDAgb3IgdGhlIG90aGVyIGNvZGUg
cGF0aCBzaG91bGQgZG8gYSBjYWxsYmFjayB3aXRoCiAgICAgLy8gYSBmYWlsdXJlLgotICAgIHRo
aXNQdHItPm1fbWFpblRocmVhZExvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250
ZXh0LCB0aGlzUHRyLCAqcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBz
dG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgdGhpc1B0
ci0+bV9tYWluVGhyZWFkTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKGNvbnRleHQs
IHRoaXNQdHIsICpyZXF1ZXN0LCBvcHRpb25zKTsKICAgICBBU1NFUlQodGhpc1B0ci0+bV9tYWlu
VGhyZWFkTG9hZGVyKTsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJs
ZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVM
b2FkZXIuaAkocmV2aXNpb24gNDcyNTMpCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEwICs1NSwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8V29ya2VyVGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVy
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoV29ya2VyQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVM
b2FkZXJDbGllbnQmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGlj
eSk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2FkZXI+IGNy
ZWF0ZShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorICAgICAgICBzdGF0
aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFdvcmtlckNvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMmKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFk
YWJsZUxvYWRlcj4gY3JlYXRlKFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFRocmVhZGFi
bGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0
aW9ucykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyKHdvcmtlckNvbnRleHQsIGNsaWVudCwgdGFza01vZGUsIHJlcXVlc3Qs
IGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMsIGNyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V29ya2VyVGhyZWFkYWJsZUxvYWRlcih3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCBy
ZXF1ZXN0LCBvcHRpb25zKSk7CiAgICAgICAgIH0KIAogICAgICAgICB+V29ya2VyVGhyZWFkYWJs
ZUxvYWRlcigpOwpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGNsYXNzIE1haW5UaHJlYWRCcmlkZ2UgOiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKICAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAgLy8gQWxsIGV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29u
dGV4dCdzIHRocmVhZC4KLSAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2UoUGFzc1JlZlB0cjxU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlckxvYWRlclByb3h5JiwgY29uc3Qg
U3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywg
Q29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGlj
eSk7CisgICAgICAgICAgICBNYWluVGhyZWFkQnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxv
YWRlckNsaWVudFdyYXBwZXI+LCBXb3JrZXJMb2FkZXJQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFz
a01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRp
b25zJik7CiAgICAgICAgICAgICB2b2lkIGNhbmNlbCgpOwogICAgICAgICAgICAgdm9pZCBkZXN0
cm95KCk7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgTWFpblRocmVhZEJyaWRnZSopOwogICAgICAgICAgICAgfk1haW5UaHJlYWRCcmlkZ2UoKTsK
IAotICAgICAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIHN0ZDo6YXV0b19wdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBT
dG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgICAg
ICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBNYWluVGhyZWFkQnJpZGdlKiwgc3RkOjphdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdGE+LCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyk7CiAgICAgICAgICAgICBzdGF0
aWMgdm9pZCBtYWluVGhyZWFkQ2FuY2VsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhy
ZWFkQnJpZGdlKik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKICAgICAgICAgfTsKIAotICAgICAg
ICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
TG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2Vy
Q29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2Rl
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYp
OwogCiAgICAgICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHQ7CiAgICAg
ICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gbV93b3JrZXJDbGllbnRX
cmFwcGVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAkocmV2aXNpb24g
NDcyNTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0
cmluZzsKICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YTsKICAgICBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhOworICAgIHN0cnVjdCBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9uczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9z
c1RocmVhZENvcGllclBhc3NUaHJvdWdoIHsKICAgICAgICAgdHlwZWRlZiBUIFR5cGU7CkBAIC02
NSw2ICs2Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBUKj4gOiBwdWJsaWMgQ3Jvc3NU
aHJlYWRDb3BpZXJQYXNzVGhyb3VnaDxUKj4gewogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFRocmVhZGFibGVMb2FkZXJPcHRpb25z
PiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFRocmVhZGFibGVMb2FkZXJP
cHRpb25zPiB7CisgICAgfTsKKwogICAgIC8vIEN1c3RvbSBjb3B5IG1ldGhvZHMuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgUmVm
UHRyPFRocmVhZFNhZmVTaGFyZWQ8VD4gPiA+IHsKICAgICAgICAgdHlwZWRlZiBQYXNzUmVmUHRy
PFQ+IFR5cGU7CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAkocmV2
aXNpb24gNDcyNTMpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksMTIgQEAgdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6
OmxvYWRTeW5jaHJvbm91cwogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgIFdvcmtlclRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4
dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCAqcmVxdWVzdCwgKnRoaXMsIEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworCisgICAgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0
cnVlOworICAgIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblJlZGlyZWN0ID0gY3Jvc3NPcmlnaW5S
ZWRpcmVjdFBvbGljeSA/IEFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdCA6IERlbnlDcm9zc09yaWdp
blJlZGlyZWN0OworCisgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCksICpyZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7CiB9CiAgICAgCiB2b2lkIFdvcmtlclNj
cmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgQ3Jvc3NPcmlnaW5SZWRpcmVj
dFBvbGljeSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5LCBXb3JrZXJTY3JpcHRMb2FkZXJDbGll
bnQqIGNsaWVudCkKQEAgLTcyLDcgKzc3LDExIEBAIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjps
b2FkQXN5bmNocm9ub3UKICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fdGhyZWFkYWJsZUxvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCB0aGlzLCAqcmVxdWVzdCwgRG9Ob3RTZW5kTG9hZENhbGxiYWNrcywgRG9O
b3RTbmlmZkNvbnRlbnQsIEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kpOworICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0
aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKKyAgICBvcHRpb25zLmFsbG93Q3Jvc3NPcmln
aW5SZWRpcmVjdCA9IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgPyBBbGxvd0Nyb3NzT3JpZ2lu
UmVkaXJlY3QgOiBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdDsKKworICAgIG1fdGhyZWFkYWJsZUxv
YWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB0
aGlzLCAqcmVxdWVzdCwgb3B0aW9ucyk7CiB9CiAKIFBhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0
PiBXb3JrZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCgpCkluZGV4OiBXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkNh
Y2hlLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5oIgotI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIK
ICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnQuaCIKQEAgLTkzLDI1ICs5MiwyNSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlk
VG9rZW4oY29uc3QgU3RyaW5nJiBuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAg
VUNoYXIgYyA9IG5hbWVbaV07Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjID49IDEyNyB8fCBj
IDw9IDMyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBp
ZiAoYyA9PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9PSAnPCcgfHwgYyA9PSAnPicgfHwgYyA9PSAn
QCcgfHwKICAgICAgICAgICAgIGMgPT0gJywnIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IGMg
PT0gJ1xcJyB8fCBjID09ICdcIicgfHwKICAgICAgICAgICAgIGMgPT0gJy8nIHx8IGMgPT0gJ1sn
IHx8IGMgPT0gJ10nIHx8IGMgPT0gJz8nIHx8IGMgPT0gJz0nIHx8CiAgICAgICAgICAgICBjID09
ICd7JyB8fCBjID09ICd9JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwogc3RhdGljIGJvb2wgaXNWYWxpZEhlYWRl
clZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cmVhbGx5IG1hdGNoIG5hbWUgYWdhaW5zdCAKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVh
bGx5IG1hdGNoIG5hbWUgYWdhaW5zdAogICAgIC8vIGZpZWxkLXZhbHVlIGluIHNlY3Rpb24gNC4y
IG9mIFJGQyAyNjE2LgotICAgICAgICAKKwogICAgIHJldHVybiAhbmFtZS5jb250YWlucygnXHIn
KSAmJiAhbmFtZS5jb250YWlucygnXG4nKTsKIH0KIApAQCAtMTQzLDkgKzE0Miw5IEBAIFhNTEh0
dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGUKICAgICAsIG1fcmVzcG9uc2VUZXh0
KCIiKQogICAgICwgbV9jcmVhdGVkRG9jdW1lbnQoZmFsc2UpCiAgICAgLCBtX2Vycm9yKGZhbHNl
KQorICAgICwgbV91cGxvYWRFdmVudHNBbGxvd2VkKHRydWUpCiAgICAgLCBtX3VwbG9hZENvbXBs
ZXRlKGZhbHNlKQogICAgICwgbV9zYW1lT3JpZ2luUmVxdWVzdCh0cnVlKQotICAgICwgbV9pblBy
ZWZsaWdodChmYWxzZSkKICAgICAsIG1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdChmYWxzZSkK
ICAgICAsIG1fcmVjZWl2ZWRMZW5ndGgoMCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKDAp
CkBAIC0yMDcsNyArMjA2LDcgQEAgRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhN
TCgpIAogICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+d3JpdGUoU3RyaW5nKG1fcmVzcG9uc2VU
ZXh0KSk7CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5maW5pc2hQYXJzaW5nKCk7CiAgICAg
ICAgICAgICBtX3Jlc3BvbnNlWE1MLT5jbG9zZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIGlmICghbV9yZXNwb25zZVhNTC0+d2VsbEZvcm1lZCgpKQogICAgICAgICAgICAgICAgIG1f
cmVzcG9uc2VYTUwgPSAwOwogICAgICAgICB9CkBAIC0yMzYsNyArMjM1LDcgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0ZW5lcihjbwogICAgICAgICBmb3IgKExpc3RlbmVyVmVj
dG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJ
dGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpCiAgICAgICAgICAgICBpZiAo
Kmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCisKICAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKICAg
ICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwogICAgIH0K
QEAgLTMyMiwxMCArMzIxLDEwIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3Ry
aW5nJiAKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIAorCiAgICAgLy8gTWV0aG9kIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gQnV0IHNpbmNl
IEZpcmVmb3ggdXBwZXJjYXNlcyBtZXRob2QgbmFtZXMgaXQga25vd3MsIHdlJ2xsIGRvIHRoZSBz
YW1lLgogICAgIFN0cmluZyBtZXRob2RVcHBlcihtZXRob2QudXBwZXIoKSk7Ci0gICAgCisKICAg
ICBpZiAobWV0aG9kVXBwZXIgPT0gIlRSQUNFIiB8fCBtZXRob2RVcHBlciA9PSAiVFJBQ0siIHx8
IG1ldGhvZFVwcGVyID09ICJDT05ORUNUIikgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzM1LDcgKzMzNCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
Om9wZW4oY29uc3QgU3RyaW5nJiAKIAogICAgIGlmIChtZXRob2RVcHBlciA9PSAiQ09QWSIgfHwg
bWV0aG9kVXBwZXIgPT0gIkRFTEVURSIgfHwgbWV0aG9kVXBwZXIgPT0gIkdFVCIgfHwgbWV0aG9k
VXBwZXIgPT0gIkhFQUQiCiAgICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJJTkRFWCIgfHwgbWV0
aG9kVXBwZXIgPT0gIkxPQ0siIHx8IG1ldGhvZFVwcGVyID09ICJNLVBPU1QiIHx8IG1ldGhvZFVw
cGVyID09ICJNS0NPTCIgfHwgbWV0aG9kVXBwZXIgPT0gIk1PVkUiCi0gICAgICAgIHx8IG1ldGhv
ZFVwcGVyID09ICJPUFRJT05TIiB8fCBtZXRob2RVcHBlciA9PSAiUE9TVCIgfHwgbWV0aG9kVXBw
ZXIgPT0gIlBST1BGSU5EIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUFBBVENIIiB8fCBtZXRob2RV
cHBlciA9PSAiUFVUIiAKKyAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIk9QVElPTlMiIHx8IG1l
dGhvZFVwcGVyID09ICJQT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUEZJTkQiIHx8IG1ldGhv
ZFVwcGVyID09ICJQUk9QUEFUQ0giIHx8IG1ldGhvZFVwcGVyID09ICJQVVQiCiAgICAgICAgIHx8
IG1ldGhvZFVwcGVyID09ICJVTkxPQ0siKQogICAgICAgICBtX21ldGhvZCA9IG1ldGhvZFVwcGVy
OwogICAgIGVsc2UKQEAgLTM1Nyw3ICszNTYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVu
KGNvbnN0IFN0cmluZyYgCiB7CiAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKICAg
ICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyKTsKLSAgICAKKwogICAgIG9wZW4obWV0
aG9kLCB1cmxXaXRoQ3JlZGVudGlhbHMsIGFzeW5jLCBlYyk7CiB9CiAKQEAgLTM2Niw3ICszNjUs
NyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAgICAgS1VSTCB1
cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1
c2VyKTsKICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0UGFzcyhwYXNzd29yZCk7Ci0gICAgCisK
ICAgICBvcGVuKG1ldGhvZCwgdXJsV2l0aENyZWRlbnRpYWxzLCBhc3luYywgZWMpOwogfQogCkBA
IC00NjMsMzQgKzQ2MiwyMyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEZpbGUqIGJvZHks
IEV4CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgLy8gVXBsb2FkIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgZGlzYWxsb3dl
ZCBmb3Igc2ltcGxlIGNyb3NzLW9yaWdpbiByZXF1ZXN0cywgYmVjYXVzZSBQT1NUaW5nIHRvIGFu
IFVSTCB0aGF0IGRvZXMgbm90Ci0gICAgLy8gcGVybWl0IGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBz
aG91bGQgbG9vayBleGFjdGx5IGxpa2UgUE9TVGluZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdCBy
ZXNwb25kIGF0IGFsbC4gSWYgYSBsaXN0ZW5lciBleGlzdHMKLSAgICAvLyB3aGVuIGNyZWF0aW5n
IHRoZSByZXF1ZXN0LCBpdCB3aWxsIGZvcmNlIHByZWZsaWdodC4KKyAgICAvLyBUaGUgcHJlc2Vu
Y2Ugb2YgdXBsb2FkIGV2ZW50IGxpc3RlbmVycyBmb3JjZXMgdXMgdG8gdXNlIHByZWZsaWdodGlu
ZyBiZWNhdXNlIFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBub3QKKyAgICAvLyBwZXJtaXQg
Y3Jvc3Mgb3JpZ2luIHJlcXVlc3RzIHNob3VsZCBsb29rIGV4YWN0bHkgbGlrZSBQT1NUaW5nIHRv
IGFuIFVSTCB0aGF0IGRvZXMgbm90IHJlc3BvbmQgYXQgYWxsLgogICAgIC8vIEFsc28sIG9ubHkg
YXN5bmMgcmVxdWVzdHMgc3VwcG9ydCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzLgotICAgIG1fdXBs
b2FkRXZlbnRzQWxsb3dlZCA9IGZhbHNlOworICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQgPSBmYWxz
ZTsKICAgICBpZiAobV9hc3luYykgewogICAgICAgICBkaXNwYXRjaExvYWRTdGFydEV2ZW50KCk7
CiAgICAgICAgIGlmIChtX3JlcXVlc3RFbnRpdHlCb2R5ICYmIG1fdXBsb2FkKSB7Ci0gICAgICAg
ICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBtX3VwbG9hZC0+aGFzTGlzdGVuZXJzKCk7Cisg
ICAgICAgICAgICBmb3JjZVByZWZsaWdodCA9IG1fdXBsb2FkLT5oYXNMaXN0ZW5lcnMoKTsKICAg
ICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaExvYWRTdGFydEV2ZW50KCk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKTsKIAotICAgIGlmICghbV9z
YW1lT3JpZ2luUmVxdWVzdCkgewotICAgICAgICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0
KGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dl
ZCA9IHRydWU7Ci0KLSAgICBtYWtlU2FtZU9yaWdpblJlcXVlc3QoZWMpOwotfQotCi12b2lkIFhN
TEh0dHBSZXF1ZXN0OjptYWtlU2FtZU9yaWdpblJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgQVNTRVJUKG1fc2FtZU9yaWdpblJlcXVlc3QpOworICAgIC8vIFdlIGFsc28gcmVtZW1i
ZXIgd2hldGhlciB1cGxvYWQgZXZlbnRzIHNob3VsZCBiZSBhbGxvd2VkIGZvciB0aGlzIHJlcXVl
c3QgaW4gY2FzZSB0aGUgdXBsb2FkIGxpc3RlbmVycyBhcmUKKyAgICAvLyBhZGRlZCBhZnRlciB0
aGUgcmVxdWVzdCBpcyBzdGFydGVkLgorICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9ICFpc1Np
bXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycyk7
CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3VybCk7CiAgICAgcmVxdWVzdC5zZXRI
VFRQTWV0aG9kKG1fbWV0aG9kKTsKQEAgLTUwNCwyMDIgKzQ5MiwyOSBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjptYWtlU2FtZU9yaWdpblJlcXVlCiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6
ZSgpID4gMCkKICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhl
YWRlcnMpOwogCi0gICAgaWYgKG1fYXN5bmMpCi0gICAgICAgIGxvYWRSZXF1ZXN0QXN5bmNocm9u
b3VzbHkocmVxdWVzdCk7Ci0gICAgZWxzZQotICAgICAgICBsb2FkUmVxdWVzdFN5bmNocm9ub3Vz
bHkocmVxdWVzdCwgZWMpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjptYWtlQ3Jvc3NPcmln
aW5BY2Nlc3NSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVCghbV9zYW1l
T3JpZ2luUmVxdWVzdCk7Ci0KLSAgICBpZiAoIW1fdXBsb2FkRXZlbnRzQWxsb3dlZCAmJiBpc1Np
bXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykp
Ci0gICAgICAgIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoZWMpOwotICAgIGVs
c2UKLSAgICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoZWMp
OwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjptYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NS
ZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChpc1NpbXBsZUNyb3NzT3Jp
Z2luQWNjZXNzUmVxdWVzdChtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykpOworICAgIFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNr
cyA9IHRydWU7CisgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAgICBvcHRpb25z
LmNyb3NzT3JpZ2luQWNjZXNzQ29udHJvbCA9IHRydWU7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRl
bnRpYWxzID0gbV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFsczsKKyAg
ICBvcHRpb25zLmZvcmNlQ3Jvc3NPcmlnaW5QcmVmbGlnaHQgPSBmb3JjZVByZWZsaWdodDsKKyAg
ICBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdCA9IGZhbHNlOwogCi0gICAgLy8gQ3Jv
c3Mtb3JpZ2luIHJlcXVlc3RzIGFyZSBvbmx5IGRlZmluZWQgZm9yIEhUVFAuIFdlIHdvdWxkIGNh
dGNoIHRoaXMgd2hlbiBjaGVja2luZyByZXNwb25zZSBoZWFkZXJzIGxhdGVyLCBidXQgdGhlcmUg
aXMgbm8gcmVhc29uIHRvIHNlbmQgYSByZXF1ZXN0IHRoYXQncyBndWFyYW50ZWVkIHRvIGJlIGRl
bmllZC4KLSAgICBpZiAoIW1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAg
ZWMgPSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbjo6TkVUV09SS19FUlI7Ci0gICAgICAgIG5ldHdv
cmtFcnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgS1VSTCB1cmwgPSBtX3Vy
bDsKLSAgICB1cmwuc2V0VXNlcihTdHJpbmcoKSk7Ci0gICAgdXJsLnNldFBhc3MoU3RyaW5nKCkp
OwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKLSAgICByZXF1ZXN0LnNldEhU
VFBNZXRob2QobV9tZXRob2QpOwotICAgIHJlcXVlc3Quc2V0QWxsb3dIVFRQQ29va2llcyhtX2lu
Y2x1ZGVDcmVkZW50aWFscyk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQT3JpZ2luKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0KLSAgICBpZiAo
bV9yZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKQotICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFk
ZXJGaWVsZHMobV9yZXF1ZXN0SGVhZGVycyk7Ci0KLSAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9k
eSkgewotICAgICAgICBBU1NFUlQobV9tZXRob2QgIT0gIkdFVCIpOwotICAgICAgICBBU1NFUlQo
bV9tZXRob2QgIT0gIkhFQUQiKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShtX3JlcXVl
c3RFbnRpdHlCb2R5LnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fYXN5bmMpCi0gICAg
ICAgIGxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkocmVxdWVzdCk7Ci0gICAgZWxzZQotICAgICAg
ICBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkocmVxdWVzdCwgZWMpOwotfQotCi12b2lkIFhNTEh0
dHBSZXF1ZXN0OjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBTdHJpbmcgb3JpZ2luID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOwotICAgIEtVUkwgdXJsID0gbV91
cmw7Ci0gICAgdXJsLnNldFVzZXIoU3RyaW5nKCkpOwotICAgIHVybC5zZXRQYXNzKFN0cmluZygp
KTsKLQotICAgIGlmICghQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCku
Y2FuU2tpcFByZWZsaWdodChvcmlnaW4sIHVybCwgbV9pbmNsdWRlQ3JlZGVudGlhbHMsIG1fbWV0
aG9kLCBtX3JlcXVlc3RIZWFkZXJzKSkgewotICAgICAgICBtX2luUHJlZmxpZ2h0ID0gdHJ1ZTsK
LSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHByZWZsaWdodFJlcXVlc3QodXJsKTsKLSAgICAgICAg
cHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJPUFRJT05TIik7Ci0gICAgICAgIHByZWZs
aWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJPcmlnaW4iLCBvcmlnaW4pOwotICAgICAg
ICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVx
dWVzdC1NZXRob2QiLCBtX21ldGhvZCk7Ci0KLSAgICAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMu
c2l6ZSgpID4gMCkgewotICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiBoZWFkZXJCdWZmZXI7Ci0g
ICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVxdWVzdEhl
YWRlcnMuYmVnaW4oKTsKLSAgICAgICAgICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJz
dCk7Ci0gICAgICAgICAgICArK2l0OwotCi0gICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RIZWFkZXJzLmVuZCgpOwotICAgICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBl
bmQoJywnKTsKLSAgICAgICAgICAgICAgICBoZWFkZXJCdWZmZXIuYXBwZW5kKCcgJyk7Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFj
Y2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycyIsIFN0cmluZzo6YWRvcHQoaGVhZGVyQnVmZmVy
KSk7Ci0gICAgICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMobV9y
ZXF1ZXN0SGVhZGVycyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9hc3luYykgewotICAg
ICAgICAgICAgbV91cGxvYWRFdmVudHNBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGxvYWRS
ZXF1ZXN0QXN5bmNocm9ub3VzbHkocHJlZmxpZ2h0UmVxdWVzdCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkocHJlZmxp
Z2h0UmVxdWVzdCwgZWMpOwotICAgICAgICBtX2luUHJlZmxpZ2h0ID0gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFNlbmQgdGhl
IGFjdHVhbCByZXF1ZXN0LgotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7Ci0gICAg
cmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEFsbG93SFRU
UENvb2tpZXMobV9pbmNsdWRlQ3JlZGVudGlhbHMpOwotICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKCJPcmlnaW4iLCBvcmlnaW4pOwotCi0gICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6
ZSgpID4gMCkKLSAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhl
YWRlcnMpOwotCi0gICAgaWYgKG1fcmVxdWVzdEVudGl0eUJvZHkpIHsKLSAgICAgICAgQVNTRVJU
KG1fbWV0aG9kICE9ICJHRVQiKTsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJIRUFEIik7
Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkobV9yZXF1ZXN0RW50aXR5Qm9keS5yZWxlYXNl
KCkpOwotICAgIH0KKyAgICBtX2V4Y2VwdGlvbkNvZGUgPSAwOworICAgIG1fZXJyb3IgPSBmYWxz
ZTsKIAogICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9
IHRydWU7Ci0gICAgICAgIGxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkocmVxdWVzdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkocmVxdWVz
dCwgZWMpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpoYW5kbGVBc3luY2hyb25vdXNQcmVm
bGlnaHRSZXN1bHQoKQotewotICAgIEFTU0VSVChtX2luUHJlZmxpZ2h0KTsKLSAgICBBU1NFUlQo
bV9hc3luYyk7Ci0KLSAgICBtX2luUHJlZmxpZ2h0ID0gZmFsc2U7Ci0KLSAgICBLVVJMIHVybCA9
IG1fdXJsOwotICAgIHVybC5zZXRVc2VyKFN0cmluZygpKTsKLSAgICB1cmwuc2V0UGFzcyhTdHJp
bmcoKSk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAgIHJlcXVlc3Qu
c2V0SFRUUE1ldGhvZChtX21ldGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxvd0hUVFBDb29raWVz
KG1faW5jbHVkZUNyZWRlbnRpYWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBPcmlnaW4oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLQotICAg
IGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVlc3QuYWRkSFRU
UEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3JlcXVlc3RFbnRp
dHlCb2R5KSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0gICAgICAgIEFT
U0VSVChtX21ldGhvZCAhPSAiSEVBRCIpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KG1f
cmVxdWVzdEVudGl0eUJvZHkucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICBtX3VwbG9hZEV2ZW50
c0FsbG93ZWQgPSB0cnVlOwotICAgIGxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHkocmVxdWVzdCk7
Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmxvYWRSZXF1ZXN0U3luY2hyb25vdXNseShSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVCgh
bV9hc3luYyk7Ci0KLSAgICBtX2xvYWRlciA9IDA7Ci0gICAgbV9leGNlcHRpb25Db2RlID0gMDsK
LSAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IChtX3NhbWVPcmlnaW5S
ZXF1ZXN0IHx8IG1faW5jbHVkZUNyZWRlbnRpYWxzKSA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMg
OiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0
VXBsb2FkUHJvZ3Jlc3ModHJ1ZSk7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsK
KyAgICAgICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIHJlcXVlc3QsICp0aGlzLCBvcHRpb25zKTsKIAotICAgIFRocmVhZGFi
bGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCByZXF1ZXN0LCAqdGhpcywgc3RvcmVkQ3JlZGVudGlhbHMpOwogICAgIGlmICghbV9leGNl
cHRpb25Db2RlICYmIG1fZXJyb3IpCiAgICAgICAgIG1fZXhjZXB0aW9uQ29kZSA9IFhNTEh0dHBS
ZXF1ZXN0RXhjZXB0aW9uOjpORVRXT1JLX0VSUjsKICAgICBlYyA9IG1fZXhjZXB0aW9uQ29kZTsK
IH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKG1fYXN5bmMpOwotICAgIG1fZXhj
ZXB0aW9uQ29kZSA9IDA7Ci0gICAgLy8gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSBjYW4gcmV0
dXJuIG51bGwgaGVyZSwgZm9yIGV4YW1wbGUgaWYgd2UncmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRv
IGEgcGFnZS4KLSAgICAvLyBUaGlzIGlzIHRydWUgd2hpbGUgcnVubmluZyBvbnVubG9hZCBoYW5k
bGVycy4KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZSBhYmxlIHRvIHNlbmQgWE1MSHR0cFJl
cXVlc3RzIGZyb20gb251bmxvYWQsIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDkwND4uCi0gICAgLy8gRklYTUU6IE1heWJlIGNyZWF0ZSBjYW4gcmV0dXJuIG51bGwg
Zm9yIG90aGVyIHJlYXNvbnMgdG9vPwotICAgIExvYWRDYWxsYmFja3MgY2FsbGJhY2tzID0gbV9p
blByZWZsaWdodCA/IERvTm90U2VuZExvYWRDYWxsYmFja3MgOiBTZW5kTG9hZENhbGxiYWNrczsK
LSAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IChtX3NhbWVPcmlnaW5S
ZXF1ZXN0IHx8IG1faW5jbHVkZUNyZWRlbnRpYWxzKSA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMg
OiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0KLSAgICBpZiAobV91cGxvYWQpCi0gICAg
ICAgIHJlcXVlc3Quc2V0UmVwb3J0VXBsb2FkUHJvZ3Jlc3ModHJ1ZSk7Ci0KLSAgICBtX2xvYWRl
ciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRo
aXMsIHJlcXVlc3QsIGNhbGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIHN0b3JlZENyZWRlbnRp
YWxzLCBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdCk7Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAg
ICAgICAgLy8gTmVpdGhlciB0aGlzIG9iamVjdCBub3IgdGhlIEphdmFTY3JpcHQgd3JhcHBlciBz
aG91bGQgYmUgZGVsZXRlZCB3aGlsZQotICAgICAgICAvLyBhIHJlcXVlc3QgaXMgaW4gcHJvZ3Jl
c3MgYmVjYXVzZSB3ZSBuZWVkIHRvIGtlZXAgdGhlIGxpc3RlbmVycyBhbGl2ZSwKLSAgICAgICAg
Ly8gYW5kIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIEphdmFTY3JpcHQgd3JhcHBlci4KLSAg
ICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgLy8gRm9y
IG5vdyB3ZSBzaG91bGQgb25seSBiYWxhbmNlIHRoZSBub25DYWNoZWQgcmVxdWVzdCBjb3VudCBm
b3IgbWFpbi10aHJlYWQgWEhScyBhbmQgbm90Ci0gICAgICAgIC8vIFdvcmtlciBYSFJzLCBhcyB0
aGUgQ2FjaGUgaXMgbm90IHRocmVhZC1zYWZlLgotICAgICAgICAvLyBUaGlzIHdpbGwgYmVjb21l
IGlycmVsZXZhbnQgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI3MTY1IGlzIHJlc29sdmVkLgotICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdCk7Ci0g
ICAgICAgICAgICBjYWNoZSgpLT5sb2FkZXIoKS0+bm9uQ2FjaGVSZXF1ZXN0SW5GbGlnaHQobV91
cmwpOwotICAgICAgICAgICAgbV9kaWRUZWxsTG9hZGVyQWJvdXRSZXF1ZXN0ID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogewogICAg
IC8vIGludGVybmFsQWJvcnQoKSBjYWxscyBkcm9wUHJvdGVjdGlvbigpLCB3aGljaCBtYXkgcmVs
ZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCkBAIC03MTEsNyArNTI2LDcgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6YWJvcnQoKQogCiAgICAgLy8gQ2xlYXIgaGVhZGVycyBhcyByZXF1aXJlZCBieSB0
aGUgc3BlYwogICAgIG1fcmVxdWVzdEhlYWRlcnMuY2xlYXIoKTsKLSAgICAKKwogICAgIGlmICgo
bV9zdGF0ZSA8PSBPUEVORUQgJiYgIXNlbmRGbGFnKSB8fCBtX3N0YXRlID09IERPTkUpCiAgICAg
ICAgIG1fc3RhdGUgPSBVTlNFTlQ7CiAgICAgZWxzZSB7CkBAIC03OTQsNyArNjA5LDcgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnRFcnJvcigpCiAgICAgfQogfQogCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgICAgICAKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRy
b3BQcm90ZWN0aW9uKCkKIHsKICNpZiBVU0UoSlNDKQogICAgIC8vIFRoZSBYSFIgb2JqZWN0IGl0
c2VsZiBob2xkcyBvbiB0byB0aGUgcmVzcG9uc2VUZXh0LCBhbmQKQEAgLTg1NCw3ICs2NjksNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvCiAKIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcGFpcjxIVFRQSGVhZGVyTWFwOjppdGVy
YXRvciwgYm9vbD4gcmVzdWx0ID0gbV9yZXF1ZXN0SGVhZGVycy5hZGQobmFtZSwgdmFsdWUpOyAK
KyAgICBwYWlyPEhUVFBIZWFkZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3JlcXVl
c3RIZWFkZXJzLmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQogICAg
ICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCArPSAiLCAiICsgdmFsdWU7CiB9CkBAIC05MzksNyAr
NzU0LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZU1JTUVUeXBlKAogICAgIH0K
ICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L3ht
bCI7Ci0gICAgCisKICAgICByZXR1cm4gbWltZVR5cGU7CiB9CiAKQEAgLTk4MSw3ICs3OTYsNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291CiAgICAgICAgIGNhY2hl
KCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVlc3RDb21wbGV0ZShtX3VybCk7CiAgICAgICAgIG1f
ZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8v
IElmIHdlIGFyZSBhbHJlYWR5IGluIGFuIGVycm9yIHN0YXRlLCBmb3IgaW5zdGFuY2Ugd2UgY2Fs
bGVkIGFib3J0KCksIGJhaWwgb3V0IGVhcmx5LgogICAgIGlmIChtX2Vycm9yKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDExLDExICs4MjYsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5p
c2hMb2FkaW5nKHVuCiAgICAgaWYgKG1fZXJyb3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2luUHJlZmxpZ2h0KSB7Ci0gICAgICAgIGRpZEZpbmlzaExvYWRpbmdQcmVmbGlnaHQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmIChtX3N0YXRlIDwgSEVBREVSU19SRUNF
SVZFRCkKICAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVSU19SRUNFSVZFRCk7CiAKQEAgLTEwMzUs
MTkgKzg0NSw2IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAg
ICAgICAgZHJvcFByb3RlY3Rpb24oKTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmlu
aXNoTG9hZGluZ1ByZWZsaWdodCgpCi17Ci0gICAgQVNTRVJUKG1faW5QcmVmbGlnaHQpOwotICAg
IEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7Ci0KLSAgICAvLyBGSVhNRTogdGhpcyBjYW4g
cHJvYmFibHkgYmUgbW92ZWQgdG8gZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0LgotICAgIGlm
IChtX2FzeW5jKQotICAgICAgICBoYW5kbGVBc3luY2hyb25vdXNQcmVmbGlnaHRSZXN1bHQoKTsK
LQotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7
Ci19Ci0KIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCiB7CiAg
ICAgaWYgKCFtX3VwbG9hZCkKQEAgLTEwNjUsNDUgKzg2MiwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBpZiAo
bV9pblByZWZsaWdodCkgewotICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2VQcmVmbGlnaHQocmVz
cG9uc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3NhbWVPcmlnaW5S
ZXF1ZXN0KSB7Ci0gICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3BvbnNl
LCBtX2luY2x1ZGVDcmVkZW50aWFscywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0
eU9yaWdpbigpKSkgewotICAgICAgICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAg
ICAgbV9yZXNwb25zZUVuY29kaW5nID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1fbWlt
ZVR5cGVPdmVycmlkZSk7CiAgICAgaWYgKG1fcmVzcG9uc2VFbmNvZGluZy5pc0VtcHR5KCkpCiAg
ICAgICAgIG1fcmVzcG9uc2VFbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsK
IH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlUHJlZmxpZ2h0KGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVChtX2luUHJlZmxp
Z2h0KTsKLSAgICBBU1NFUlQoIW1fc2FtZU9yaWdpblJlcXVlc3QpOwotCi0gICAgaWYgKCFwYXNz
ZXNBY2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1faW5jbHVkZUNyZWRlbnRpYWxzLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0gICAgICAgIG5ldHdv
cmtFcnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgT3duUHRyPENyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtPiBwcmVmbGlnaHRSZXN1bHQobmV3IENyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtKG1faW5jbHVkZUNyZWRlbnRpYWxzKSk7Ci0gICAg
aWYgKCFwcmVmbGlnaHRSZXN1bHQtPnBhcnNlKHJlc3BvbnNlKQotICAgICAgICB8fCAhcHJlZmxp
Z2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbk1ldGhvZChtX21ldGhvZCkKLSAgICAgICAgfHwg
IXByZWZsaWdodFJlc3VsdC0+YWxsb3dzQ3Jvc3NPcmlnaW5IZWFkZXJzKG1fcmVxdWVzdEhlYWRl
cnMpKSB7Ci0gICAgICAgIG5ldHdvcmtFcnJvcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50
cnkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
LCBtX3VybCwgcHJlZmxpZ2h0UmVzdWx0LnJlbGVhc2UoKSk7Ci19Ci0KIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiBmYWlsdXJlUmVzcG9uc2UpCiB7CiAgICAgbV9yZXNwb25zZSA9IGZhaWx1cmVS
ZXNwb25zZTsKQEAgLTExMTEsMTIgKzg3NSwxMiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRS
ZWNlaXZlQXV0aGVudGljCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7Ci0gICAgaWYgKG1faW5QcmVmbGlnaHQgfHwgbV9l
cnJvcikKKyAgICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fc3Rh
dGUgPCBIRUFERVJTX1JFQ0VJVkVEKQogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJ
VkVEKTsKLSAgCisKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBpZiAoIW1fcmVzcG9u
c2VFbmNvZGluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3Vy
Y2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwpAQCAt
MTIxMCw3ICs5NzQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaExvYWRTdGFydEV2
CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChsb25nIGxvbmcg
ZXhwZWN0ZWRMZW5ndGgpCiB7Ci0gICAgZGlzcGF0Y2hYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnQobV9vblByb2dyZXNzTGlzdGVuZXIuZ2V0KCksIGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50
LCBleHBlY3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLCAK
KyAgICBkaXNwYXRjaFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudChtX29uUHJvZ3Jlc3NMaXN0
ZW5lci5nZXQoKSwgZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYm
IG1fcmVjZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fcmVjZWl2ZWRMZW5n
dGgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXhwZWN0ZWRMZW5ndGgpKTsKIH0KIApAQCAtMTIz
NSw0ICs5OTksNCBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBYTUxIdHRwUmVxdWVzdDo6CiAg
ICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAg
IAorCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CiAKQEAgLTEzNSwxMCAr
MTM1LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2so
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9u
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAotICAgIC8vIFNwZWNpYWwgdmVyc2lvbnMgZm9y
IHRoZSBwcmVmbGlnaHQKLSAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZVByZWZsaWdodChjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0
KCk7Ci0KICAgICB2b2lkIHVwZGF0ZUFuZERpc3BhdGNoT25Qcm9ncmVzcyh1bnNpZ25lZCBpbnQg
bGVuKTsKIAogICAgIFN0cmluZyByZXNwb25zZU1JTUVUeXBlKCkgY29uc3Q7CkBAIC0xNTksMTYg
KzE1NSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgdm9pZCBtYWtlU2FtZU9yaWdpblJlcXVlc3QoRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChFeGNlcHRpb25Db2RlJik7Ci0K
LSAgICB2b2lkIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQo
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgaGFuZGxlQXN5bmNocm9ub3VzUHJlZmxpZ2h0UmVz
dWx0KCk7Ci0KLSAgICB2b2lkIGxvYWRSZXF1ZXN0U3luY2hyb25vdXNseShSZXNvdXJjZVJlcXVl
c3QmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBsb2FkUmVxdWVzdEFzeW5jaHJvbm91c2x5
KFJlc291cmNlUmVxdWVzdCYpOwotCiAgICAgdm9pZCBnZW5lcmljRXJyb3IoKTsKICAgICB2b2lk
IG5ldHdvcmtFcnJvcigpOwogICAgIHZvaWQgYWJvcnRFcnJvcigpOwpAQCAtMjIzLDEzICsyMDks
MTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXBsb2FkQ29tcGxldGU7CiAKICAgICBib29sIG1f
c2FtZU9yaWdpblJlcXVlc3Q7Ci0gICAgYm9vbCBtX2FsbG93QWNjZXNzOwotICAgIGJvb2wgbV9p
blByZWZsaWdodDsKICAgICBib29sIG1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdDsKIAogICAg
IC8vIFVzZWQgZm9yIG9ucHJvZ3Jlc3MgdHJhY2tpbmcKICAgICBsb25nIGxvbmcgbV9yZWNlaXZl
ZExlbmd0aDsKLSAgICAKKwogICAgIHVuc2lnbmVkIG1fbGFzdFNlbmRMaW5lTnVtYmVyOwogICAg
IFN0cmluZyBtX2xhc3RTZW5kVVJMOwogICAgIEV4Y2VwdGlvbkNvZGUgbV9leGNlcHRpb25Db2Rl
Owo=
</data>
<flag name="review"
          id="19001"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="19002"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34803</attachid>
            <date>2009-08-13 20:10:40 -0700</date>
            <delta_ts>2009-08-14 12:25:44 -0700</delta_ts>
            <desc>One more time patch</desc>
            <filename>bug28134.patch</filename>
            <type>text/plain</type>
            <size>57586</size>
            <attacher name="Aaron Boodman">aa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMDktMDgtMTMgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQlVH
IDI4MTM0OiBNb3ZlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgQWNjZXNzIENvbnRyb2wgZnJvbSBY
TUxIdHRwUmVxdWVzdCB0byBUaHJlYWRhYmxlRG9jdW1lbnRMb2FkZXIuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzNAorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBhZGRlZCBzaW5jZSBBY2Nlc3MgQ29udHJvbCB3YXMgYWxyZWFkeSB3ZWxsIHRlc3Rl
ZCBhbmQgdGhpcyBpcyBhIHB1cmUgcmVmYWN0b3IuCisKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyLmNwcDogTW92ZSBhIGxvdCBvZiB0aGUgYWNjZXNzIGNvbnRyb2wg
Y29kZSBmcm9tIFhIUiBpbiwgcHJlc2VydmluZyBpdHMKKyAgICAgICAgYmFzaWMgc3RyYXRlZ3ku
IEFsc28sIG1vZGlmeSB0aGUgc3luY2hyb25vdXMgcGF0aCB0byBub3QgYmUgYSBzcGVjaWFsIGNh
c2UsIGJ1dCByZXVzZSBtb3JlIG9mIHRoZSBhc3luYworICAgICAgICBwYXRoLgorCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOiBHbyB0aHJvdWdoIHRoZSBhc3luYyBwYXRoIGFuZCBwYXNzIGFkZGl0aW9uYWwgZmxh
Z3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSk6
IEdyb3VwIGVudW0gcGFyYW1zIGludG8gYW4gb3B0aW9ucyBzdHJ1Y3QuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtl
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KTogQnJvdWdodCBtb3N0bHkgZnJvbSBYSFIu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09y
aWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6IEhhbmRsZSBwcmVm
bGlnaHQgY2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Z2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
cHJlZmxpZ2h0U3VjY2Vzcyk6IFByZWZsaWdodCBoYW5kbGluZy4KKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6cHJlZmxpZ2h0RmFpbHVyZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6IENv
bW1vbiByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhc3luYy9zeW5jLgorICAgICAgICAq
IGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaDogR3JvdXAgZW51bSBwYXJhbXMgaW50
byBhbiBvcHRpb25zIHN0cnVjdC4KKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczo6VGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcik6RGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRl
TG9hZGVyKTogRGl0dG8uCisgICAgICAgICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
aDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVh
dGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oOiBBbGxv
dyBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyB0byBiZSBjb3BpZWQgYWNyb3NzIHRocmVhZHMuCisg
ICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmNwcDogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3JvdXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KTogTW9yZSBlbnVtLT5zdHJ1Y3QgZ3Jv
dXBpbmcuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3luY2hy
b25vdXNseSk6IE1vcmUgZW51bS0+c3RydWN0IGdyb3VwaW5nLgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6IFJlbW92ZSBhbGwgdGhlIGFjY2VzcyBjb250cm9sIGNvZGUgYW5kIHNv
bWUgc3VwcG9ydGluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpY
TUxIdHRwUmVxdWVzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZVJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWE1MSHR0
cFJlcXVlc3QuaDogRGl0dG8uCisKIDIwMDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9j
a0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA0
NzI1MykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAKICNpbmNsdWRlICJEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuaCIKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCisjaW5j
bHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmgiCisjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNDMsNjEg
KzQ0LDEwNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBj
bGllbnQsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQordm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQmIGNsaWVudCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgYm9vbCBzYW1lT3JpZ2luUmVxdWVzdCA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigp
LT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0g
ICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwot
ICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgaWRl
bnRpZmllciA9IGRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRh
KTsKLQotICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJk
YXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgotICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCBy
ZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCi0gICAgaWYg
KCFlcnJvci5pc051bGwoKSAmJiAhcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpICYmIHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgPD0gMCkgewotICAgICAgICBjbGllbnQuZGlkRmFpbChlcnJv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBh
bG9uZyB3aXRoIHRoZSBvbmUgaW4gd2lsbFNlbmRSZXF1ZXN0IGlzIHNwZWNpZmljIHRvIHhociBh
bmQKLSAgICAvLyBzaG91bGQgYmUgbWFkZSBtb3JlIGdlbmVyaWMuCi0gICAgaWYgKHNhbWVPcmln
aW5SZXF1ZXN0ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChyZXNw
b25zZS51cmwoKSkpIHsKLSAgICAgICAgY2xpZW50LmRpZEZhaWxSZWRpcmVjdENoZWNrKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlKHJl
c3BvbnNlKTsKLQotICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEuZGF0YSgpKTsKLSAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNp
emUoKSk7Ci0gICAgY2xpZW50LmRpZFJlY2VpdmVEYXRhKGJ5dGVzLCBsZW4pOwotCi0gICAgY2xp
ZW50LmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CisgICAgLy8gVGhlIGxvYWRlciB3aWxs
IGJlIGRlbGV0ZWQgYXMgc29vbiBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgorICAgIFJlZlB0cjxE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI+IGxvYWRlciA9IGFkb3B0UmVmKG5ldyBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXIoZG9jdW1lbnQsICZjbGllbnQsIExvYWRTeW5jaHJvbm91c2x5LCByZXF1
ZXN0LCBvcHRpb25zKSk7CisgICAgQVNTRVJUKGxvYWRlci0+aGFzT25lUmVmKCkpOwogfQogCi1Q
YXNzUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBj
bGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgTG9hZENhbGxiYWNrcyBjYWxs
YmFja3NTZXR0aW5nLCBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFs
cyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSBjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5KQorUGFzc1JlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFk
YWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogewotICAgIEFTU0VSVChk
b2N1bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4gbG9hZGVyID0g
YWRvcHRSZWYobmV3IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihkb2N1bWVudCwgY2xpZW50LCBy
ZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxz
LCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KSk7CisgICAgUmVmUHRyPERvY3VtZW50VGhyZWFk
YWJsZUxvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cihkb2N1bWVudCwgY2xpZW50LCBMb2FkQXN5bmNocm9ub3VzbHksIHJlcXVlc3QsIG9wdGlvbnMp
KTsKICAgICBpZiAoIWxvYWRlci0+bV9sb2FkZXIpCiAgICAgICAgIGxvYWRlciA9IDA7CiAgICAg
cmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CiB9CiAKLURvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCogY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIExvYWRD
YWxsYmFja3MgY2FsbGJhY2tzU2V0dGluZywgQ29udGVudFNuaWZmIGNvbnRlbnRTbmlmZiwgU3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xp
Y3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkKK0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCwgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCogY2xpZW50LCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMmIG9wdGlvbnMpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2RvY3VtZW50KGRv
Y3VtZW50KQotICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxz
ID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAg
ICAsIG1fc2FtZU9yaWdpblJlcXVlc3QoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJl
cXVlc3QocmVxdWVzdC51cmwoKSkpCi0gICAgLCBtX2RlbnlDcm9zc09yaWdpblJlZGlyZWN0KGNy
b3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgPT0gRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QpCisgICAg
LCBtX2FzeW5jKGJsb2NraW5nQmVoYXZpb3IgPT0gTG9hZEFzeW5jaHJvbm91c2x5KQogewogICAg
IEFTU0VSVChkb2N1bWVudCk7CiAgICAgQVNTRVJUKGNsaWVudCk7Ci0gICAgQVNTRVJUKHN0b3Jl
ZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfHwgc3RvcmVkQ3JlZGVudGlh
bHMgPT0gRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKLSAgICBBU1NFUlQoY3Jvc3NPcmln
aW5SZWRpcmVjdFBvbGljeSA9PSBEZW55Q3Jvc3NPcmlnaW5SZWRpcmVjdCB8fCBjcm9zc09yaWdp
blJlZGlyZWN0UG9saWN5ID09IEFsbG93Q3Jvc3NPcmlnaW5SZWRpcmVjdCk7Ci0gICAgbV9sb2Fk
ZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBmYWxzZSwgY2FsbGJhY2tzU2V0dGluZyA9PSBTZW5kTG9hZENhbGxiYWNrcywgY29u
dGVudFNuaWZmID09IFNuaWZmQ29udGVudCk7CisKKyAgICBpZiAobV9zYW1lT3JpZ2luUmVxdWVz
dCB8fCBtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IEFsbG93Q3Jvc3NPcmln
aW5SZXF1ZXN0cykgeworICAgICAgICBib29sIHNraXBDYW5Mb2FkQ2hlY2sgPSBmYWxzZTsKKyAg
ICAgICAgbG9hZFJlcXVlc3QocmVxdWVzdCwgc2tpcENhbkxvYWRDaGVjayk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGlj
eSA9PSBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cykgeworICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChSZXNvdXJjZUVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFT
U0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRy
b2wpOworCisgICAgaWYgKCFtX29wdGlvbnMuZm9yY2VQcmVmbGlnaHQgJiYgaXNTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QocmVxdWVzdC5odHRwTWV0aG9kKCksIHJlcXVlc3QuaHR0cEhl
YWRlckZpZWxkcygpKSkKKyAgICAgICAgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dChyZXF1ZXN0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9hY3R1YWxSZXF1ZXN0LnNldChuZXcg
UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpKTsKKyAgICAgICAgbV9hY3R1YWxSZXF1ZXN0LT5zZXRB
bGxvd0hUVFBDb29raWVzKG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKTsKKworICAgICAgICBp
ZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuY2FuU2tpcFByZWZs
aWdodChkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgcmVxdWVzdC51cmwo
KSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIHJlcXVlc3QuaHR0cE1ldGhvZCgpLCByZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RX
aXRoUHJlZmxpZ2h0KHJlcXVlc3QpOworICAgIH0KK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6Om1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVChpc1NpbXBsZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRz
KCkpKTsKKworICAgIC8vIENyb3NzLW9yaWdpbiByZXF1ZXN0cyBhcmUgb25seSBkZWZpbmVkIGZv
ciBIVFRQLiBXZSB3b3VsZCBjYXRjaCB0aGlzIHdoZW4gY2hlY2tpbmcgcmVzcG9uc2UgaGVhZGVy
cyBsYXRlciwgYnV0IHRoZXJlIGlzIG5vIHJlYXNvbiB0byBzZW5kIGEgcmVxdWVzdCB0aGF0J3Mg
Z3VhcmFudGVlZCB0byBiZSBkZW5pZWQuCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29s
SW5IVFRQRmFtaWx5KCkpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoUmVzb3VyY2VFcnJv
cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRo
ZSBwYXNzZWQgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBtb2RpZnkgc29tZSBkZXRhaWxzLgorICAg
IFJlc291cmNlUmVxdWVzdCBjcm9zc09yaWdpblJlcXVlc3QocmVxdWVzdCk7CisgICAgY3Jvc3NP
cmlnaW5SZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisgICAgY3Jvc3NPcmlnaW5SZXF1ZXN0
LnNldEFsbG93SFRUUENvb2tpZXMobV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpOworICAgIGNy
b3NzT3JpZ2luUmVxdWVzdC5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCkpOworCisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gZmFsc2U7Cisg
ICAgbG9hZFJlcXVlc3QoY3Jvc3NPcmlnaW5SZXF1ZXN0LCBza2lwQ2FuTG9hZENoZWNrKTsKK30K
Kwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1Jl
cXVlc3RXaXRoUHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdChyZXF1ZXN0LnVybCgpKTsKKyAgICBw
cmVmbGlnaHRSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisgICAgcHJlZmxpZ2h0UmVxdWVz
dC5zZXRIVFRQT3JpZ2luKG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkp
OworICAgIHByZWZsaWdodFJlcXVlc3Quc2V0QWxsb3dIVFRQQ29va2llcyhtX29wdGlvbnMuYWxs
b3dDcmVkZW50aWFscyk7CisgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJPUFRJ
T05TIik7CisgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vzcy1D
b250cm9sLVJlcXVlc3QtTWV0aG9kIiwgcmVxdWVzdC5odHRwTWV0aG9kKCkpOworCisgICAgY29u
c3QgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlckZpZWxkcyA9IHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpOworCisgICAgaWYgKHJlcXVlc3RIZWFkZXJGaWVsZHMuc2l6ZSgpID4gMCkgewor
ICAgICAgICBWZWN0b3I8VUNoYXI+IGhlYWRlckJ1ZmZlcjsKKyAgICAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVyRmllbGRzLmJlZ2luKCk7CisgICAg
ICAgIGFwcGVuZChoZWFkZXJCdWZmZXIsIGl0LT5maXJzdCk7CisgICAgICAgICsraXQ7CisKKyAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlckZp
ZWxkcy5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaGVhZGVyQnVmZmVyLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgaGVhZGVyQnVmZmVyLmFw
cGVuZCgnICcpOworICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1ZmZlciwgaXQtPmZpcnN0KTsK
KyAgICAgICAgfQorCisgICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMiLCBTdHJpbmc6OmFkb3B0KGhlYWRlckJ1
ZmZlcikpOworICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMocmVx
dWVzdEhlYWRlckZpZWxkcyk7CisgICAgfQorCisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0g
ZmFsc2U7CisgICAgbG9hZFJlcXVlc3QocHJlZmxpZ2h0UmVxdWVzdCwgc2tpcENhbkxvYWRDaGVj
ayk7CiB9CiAKIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6fkRvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcigpCkBAIC0xMjMsNyArMTcwLDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OndpbGxTZW5kUgogICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIp
OwogCiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRoZSBy
ZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgotICAgIGlm
IChtX2RlbnlDcm9zc09yaWdpblJlZGlyZWN0ICYmICFtX2RvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CisgICAgaWYgKG1fb3B0aW9ucy5jcm9z
c09yaWdpblJlZGlyZWN0UG9saWN5ID09IERlbnlDcm9zc09yaWdpblJlZGlyZWN0ICYmICFtX2Rv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJlcXVlc3QudXJsKCkpKSB7CiAg
ICAgICAgIFJlZlB0cjxEb2N1bWVudFRocmVhZGFibGVMb2FkZXI+IHByb3RlY3QodGhpcyk7CiAg
ICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICByZXF1ZXN0
ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CkBAIC0xNDMsNyArMTkwLDMxIEBAIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXYKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIEFT
U0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwogCi0gICAgbV9jbGllbnQt
PmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkg
eworICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMsIG1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKSB7Cisg
ICAgICAgICAgICBwcmVmbGlnaHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBPd25QdHI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0
ZW0+IHByZWZsaWdodFJlc3VsdChuZXcgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0
ZW0obV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMpKTsKKyAgICAgICAgaWYgKCFwcmVmbGlnaHRS
ZXN1bHQtPnBhcnNlKHJlc3BvbnNlKQorICAgICAgICAgICAgfHwgIXByZWZsaWdodFJlc3VsdC0+
YWxsb3dzQ3Jvc3NPcmlnaW5NZXRob2QobV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCkpCisg
ICAgICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMo
bV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKSB7CisgICAgICAgICAgICBwcmVm
bGlnaHRGYWlsdXJlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5hcHBlbmRFbnRyeSht
X2RvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3Qt
PnVybCgpLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7CisgICAgICAgICAgICBpZiAoIXBhc3Nlc0Fj
Y2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMsIG1f
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKSB7CisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKHJlc3BvbnNlKTsKKyAgICB9CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCkBAIC0xNTgsNyArMjI5LDE3IEBAIHZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1f
bG9hZGVyKTsKICAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIG1fY2xpZW50LT5kaWRGaW5pc2hM
b2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nKGxvYWRl
ci0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIGlmIChtX2Fj
dHVhbFJlcXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKKyAg
ICAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPT0gVXNlQWNj
ZXNzQ29udHJvbCk7CisgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpAQCAtMTc0LDcgKzI1NSw3IEBAIGJvb2wg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpnZXRTaG91bGQKIHsKICAgICBBU1NFUlRfVU5VU0VE
KGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKIAotICAgIGlmICghbV9hbGxvd1N0b3JlZENy
ZWRlbnRpYWxzKSB7CisgICAgaWYgKCFtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscykgewogICAg
ICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA9IGZhbHNlOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC0yMDAsNCArMjgxLDYxIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpyZWNlaXZlZEMKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2FuY2VsbGF0aW9uKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKSk7CiB9CiAKK3ZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpwcmVmbGlnaHRTdWNjZXNzKCkKK3sKKyAgICBPd25QdHI8
UmVzb3VyY2VSZXF1ZXN0PiBhY3R1YWxSZXF1ZXN0OworICAgIGFjdHVhbFJlcXVlc3Quc3dhcCht
X2FjdHVhbFJlcXVlc3QpOworCisgICAgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gdHJ1ZTsgIC8v
IG9rIHRvIHNraXAgbG9hZCBjaGVjayBzaW5jZSB3ZSBhbHJlYWR5IGFza2VkIGFib3V0IHRoZSBw
cmVmbGlnaHQgcmVxdWVzdAorICAgIGxvYWRSZXF1ZXN0KCphY3R1YWxSZXF1ZXN0LCBza2lwQ2Fu
TG9hZENoZWNrKTsKK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OnByZWZsaWdo
dEZhaWx1cmUoKQoreworICAgIG1fY2xpZW50LT5kaWRGYWlsKFJlc291cmNlRXJyb3IoKSk7Cit9
CisKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2tpcENhbkxvYWRDaGVjaykKK3sKKyAgICBpZiAo
bV9hc3luYykgeworICAgICAgICAvLyBEb24ndCBzbmlmZiBjb250ZW50IG9yIHNlbmQgbG9hZCBj
YWxsYmFja3MgZm9yIHRoZSBwcmVmbGlnaHQgcmVxdWVzdC4KKyAgICAgICAgYm9vbCBzZW5kTG9h
ZENhbGxiYWNrcyA9IG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyAmJiAhbV9hY3R1YWxSZXF1
ZXN0OworICAgICAgICBib29sIHNuaWZmQ29udGVudCA9IG1fb3B0aW9ucy5zbmlmZkNvbnRlbnQg
JiYgIW1fYWN0dWFsUmVxdWVzdDsKKyAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKG1fZG9jdW1lbnQtPmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNraXBDYW5Mb2Fk
Q2hlY2ssIHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucy5zbmlm
ZkNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igc3luY2hyb25vdXMgcmVxdWVzdHMuCisgICAg
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMgPSBtX29wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyA/IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBSZXNvdXJjZUVycm9yIGVycm9y
OworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6bWF4KCk7CisgICAg
aWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3VtZW50
LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKworICAgIC8vIE5vIGV4
Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIy
OTg+LgorICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3
YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCisgICAgaWYgKCFlcnJvci5pc051bGwoKSAm
JiAhcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkgPD0gMCkgeworICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBhbG9uZyB3aXRoIHRoZSBv
bmUgaW4gd2lsbFNlbmRSZXF1ZXN0IGlzIHNwZWNpZmljIHRvIHhociBhbmQKKyAgICAvLyBzaG91
bGQgYmUgbWFkZSBtb3JlIGdlbmVyaWMuCisgICAgaWYgKG1fc2FtZU9yaWdpblJlcXVlc3QgJiYg
IW1fZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QocmVzcG9uc2UudXJsKCkp
KSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsUmVkaXJlY3RDaGVjaygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKKwor
ICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0
YSgpKTsKKyAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisgICAg
ZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisKKyAgICBkaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNDcyNTMpCisrKyBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00NCw4ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyLCBw
cml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50ICB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KERvY3VtZW50KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIFN0b3JlZENyZWRlbnRpYWxz
KTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBj
cmVhdGUoRG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywg
Q3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUo
RG9jdW1lbnQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgdmlydHVhbCB+RG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
OwpAQCAtNTgsNyArNTksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVyZWZUaHJlYWRhYmxlTG9hZGVyKCkgeyBkZXJlZigpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIoRG9jdW1lbnQqLCBUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29u
dGVudFNuaWZmLCBTdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7
CisgICAgICAgIGVudW0gQmxvY2tpbmdCZWhhdmlvciB7CisgICAgICAgICAgICBMb2FkU3luY2hy
b25vdXNseSwKKyAgICAgICAgICAgIExvYWRBc3luY2hyb25vdXNseQorICAgICAgICB9OworCisg
ICAgICAgIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcihEb2N1bWVudCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBCbG9ja2luZ0JlaGF2aW9yIGJsb2NraW5nQmVoYXZpb3IsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKTsKKwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlcios
IHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpOwogCkBAIC03MSwxMiArNzgsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKIAorICAgICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBtYWtlU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCk7CisgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGln
aHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKKyAgICAgICAgdm9pZCBwcmVmbGln
aHRTdWNjZXNzKCk7CisgICAgICAgIHZvaWQgcHJlZmxpZ2h0RmFpbHVyZSgpOworCisgICAgICAg
IHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBza2lwQ2FuTG9h
ZENoZWNrKTsKKwogICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOwog
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgRG9jdW1l
bnQqIG1fZG9jdW1lbnQ7Ci0gICAgICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwor
ICAgICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBtX29wdGlvbnM7CiAgICAgICAgIGJvb2wg
bV9zYW1lT3JpZ2luUmVxdWVzdDsKLSAgICAgICAgYm9vbCBtX2RlbnlDcm9zc09yaWdpblJlZGly
ZWN0OworICAgICAgICBib29sIG1fYXN5bmM7CisgICAgICAgIE93blB0cjxSZXNvdXJjZVJlcXVl
c3Q+IG1fYWN0dWFsUmVxdWVzdDsgIC8vIG5vbi1udWxsIGR1cmluZyBBY2Nlc3MgQ29udHJvbCBw
cmVmbGlnaHQgY2hlY2tzCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ3MjUzKQorKysgV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDMzICs0
MCwzMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8VGhyZWFkYWJsZUxv
YWRlcj4gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRlbnRTbmlm
ZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDcm9z
c09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpIAorUGFzc1Jl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRp
b25zJiBvcHRpb25zKSAKIHsKICAgICBBU1NFUlQoY2xpZW50KTsKICAgICBBU1NFUlQoY29udGV4
dCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpCi0gICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBjbGllbnQsIFdvcmtlclJ1bkxvb3A6
OmRlZmF1bHRNb2RlKCksIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwg
c3RvcmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgICAgICBy
ZXR1cm4gV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KSwgY2xpZW50LCBXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpLCBy
ZXF1ZXN0LCBvcHRpb25zKTsKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIAogICAgIEFTU0VS
VChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQsIHJl
cXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3RvcmVkQ3JlZGVudGlhbHMs
IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpOworICAgIHJldHVybiBEb2N1bWVudFRocmVhZGFi
bGVMb2FkZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpLCBjbGllbnQs
IHJlcXVlc3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50JiBjbGllbnQs
IFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQordm9pZCBUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCYgY2xpZW50LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBBU1NFUlQoY29udGV4dCk7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICBpZiAoY29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpIHsKLSAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4o
Y29udGV4dCksIHJlcXVlc3QsIGNsaWVudCwgc3RvcmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09y
aWdpblJlZGlyZWN0KTsKKyAgICAgICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIHJl
cXVlc3QsIGNsaWVudCwgb3B0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCiAKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsK
LSAgICBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KSwgcmVxdWVzdCwgY2xpZW50LCBzdG9yZWRD
cmVkZW50aWFscyk7CisgICAgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCksIHJlcXVlc3QsIGNs
aWVudCwgb3B0aW9ucyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9UaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDQ3MjUzKQorKysgV2ViQ29yZS9sb2FkZXIv
VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywzMiArNDMsMzggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAg
Y2xhc3MgVGhyZWFkYWJsZUxvYWRlckNsaWVudDsKIAotICAgIGVudW0gTG9hZENhbGxiYWNrcyB7
Ci0gICAgICAgIFNlbmRMb2FkQ2FsbGJhY2tzLAotICAgICAgICBEb05vdFNlbmRMb2FkQ2FsbGJh
Y2tzCi0gICAgfTsKLQotICAgIGVudW0gQ29udGVudFNuaWZmIHsKLSAgICAgICAgU25pZmZDb250
ZW50LAotICAgICAgICBEb05vdFNuaWZmQ29udGVudAotICAgIH07Ci0KICAgICBlbnVtIFN0b3Jl
ZENyZWRlbnRpYWxzIHsKICAgICAgICAgQWxsb3dTdG9yZWRDcmVkZW50aWFscywKICAgICAgICAg
RG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzCiAgICAgfTsKLQorICAgIAorICAgIGVudW0gQ3Jv
c3NPcmlnaW5SZXF1ZXN0UG9saWN5IHsKKyAgICAgICAgRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMs
CisgICAgICAgIFVzZUFjY2Vzc0NvbnRyb2wsCisgICAgICAgIEFsbG93Q3Jvc3NPcmlnaW5SZXF1
ZXN0cworICAgIH07CisgICAgCiAgICAgZW51bSBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IHsK
ICAgICAgICAgRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QsCiAgICAgICAgIEFsbG93Q3Jvc3NPcmln
aW5SZWRpcmVjdAogICAgIH07CisgICAgCisgICAgc3RydWN0IFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIHsKKyAgICAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMoKSA6IHNlbmRMb2FkQ2FsbGJh
Y2tzKGZhbHNlKSwgc25pZmZDb250ZW50KGZhbHNlKSwgYWxsb3dDcmVkZW50aWFscyhmYWxzZSks
IGZvcmNlUHJlZmxpZ2h0KGZhbHNlKSwgY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5KERlbnlDcm9z
c09yaWdpblJlcXVlc3RzKSwgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeShBbGxvd0Nyb3NzT3Jp
Z2luUmVkaXJlY3QpIHsgfQorICAgICAgICBib29sIHNlbmRMb2FkQ2FsbGJhY2tzOworICAgICAg
ICBib29sIHNuaWZmQ29udGVudDsKKyAgICAgICAgYm9vbCBhbGxvd0NyZWRlbnRpYWxzOyAgLy8g
V2hldGhlciBIVFRQIGNyZWRlbnRpYWxzIGFuZCBjb29raWVzIGFyZSBzZW50IHdpdGggdGhlIHJl
cXVlc3QuCisgICAgICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQ7ICAvLyBJZiBBY2Nlc3NDb250cm9s
IGlzIHVzZWQsIHdoZXRoZXIgdG8gZm9yY2UgYSBwcmVmbGlnaHQuCisgICAgICAgIENyb3NzT3Jp
Z2luUmVxdWVzdFBvbGljeSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CisgICAgICAgIENyb3Nz
T3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeTsKKyAgICB9Owog
CiAgICAgLy8gVXNlZnVsIGZvciBkb2luZyBsb2FkZXIgb3BlcmF0aW9ucyBmcm9tIGFueSB0aHJl
YWQgKG5vdCB0aHJlYWRzYWZlLCAKICAgICAvLyBqdXN0IGFibGUgdG8gcnVuIG9uIHRocmVhZHMg
b3RoZXIgdGhhbiB0aGUgbWFpbiB0aHJlYWQpLgogICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXIg
OiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZvaWQg
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIFN0b3JlZENyZWRlbnRp
YWxzKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgTG9hZENhbGxiYWNrcywgQ29udGVudFNuaWZmLCBTdG9yZWRDcmVk
ZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSk7CisgICAgICAgIHN0YXRpYyB2b2lk
IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmLCBjb25zdCBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxl
TG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJD
bGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0
aW9ucyYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9IDA7CiAgICAgICAgIHZv
aWQgcmVmKCkgeyByZWZUaHJlYWRhYmxlTG9hZGVyKCk7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUv
bG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Mywx
MSArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciBsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5TW9kZVtdID0gImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlN
b2RlIjsKIAotV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6V29ya2VyVGhyZWFkYWJsZUxvYWRlcihX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiBjbGll
bnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgTG9hZENhbGxiYWNrcyBjYWxsYmFja3NTZXR0aW5nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50U25pZmYgY29udGVudFNuaWZmLCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGlj
eSBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KQorV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6V29y
a2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmIG9w
dGlvbnMpCiAgICAgOiBtX3dvcmtlckNvbnRleHQod29ya2VyQ29udGV4dCkKICAgICAsIG1fd29y
a2VyQ2xpZW50V3JhcHBlcihUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcjo6Y3JlYXRlKGNs
aWVudCkpCi0gICAgLCBtX2JyaWRnZSgqKG5ldyBNYWluVGhyZWFkQnJpZGdlKG1fd29ya2VyQ2xp
ZW50V3JhcHBlciwgbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHko
KSwgdGFza01vZGUsIHJlcXVlc3QsIGNhbGxiYWNrc1NldHRpbmcsIGNvbnRlbnRTbmlmZiwgc3Rv
cmVkQ3JlZGVudGlhbHMsIGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpKSkKKyAgICAsIG1fYnJp
ZGdlKCoobmV3IE1haW5UaHJlYWRCcmlkZ2UobV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX3dvcmtl
ckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpLCB0YXNrTW9kZSwgcmVxdWVz
dCwgb3B0aW9ucykpKQogewogfQogCkBAIC02Niw3ICs2NSw3IEBAIFdvcmtlclRocmVhZGFibGVM
b2FkZXI6On5Xb3JrZXJUaHJlYWRhYmwKICAgICBtX2JyaWRnZS5kZXN0cm95KCk7CiB9CiAKLXZv
aWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVk
Q3JlZGVudGlhbHMsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5SZWRpcmVj
dFBvbGljeSkKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIFRocmVhZGFibGVMb2FkZXJDbGllbnQmIGNsaWVudCwgY29uc3QgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9v
cCA9IHdvcmtlckNvbnRleHQtPnRocmVhZCgpLT5ydW5Mb29wKCk7CiAKQEAgLTc0LDkgKzczLDcg
QEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyYwogICAgIFN0cmluZyBt
b2RlID0gbG9hZFJlc291cmNlU3luY2hyb25vdXNseU1vZGU7CiAgICAgbW9kZS5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7CiAKLSAgICBDb250ZW50U25p
ZmYgY29udGVudFNuaWZmID0gcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpID8gU25pZmZDb250
ZW50IDogRG9Ob3RTbmlmZkNvbnRlbnQ7Ci0gICAgUmVmUHRyPFdvcmtlclRocmVhZGFibGVMb2Fk
ZXI+IGxvYWRlciA9IFdvcmtlclRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZSh3b3JrZXJDb250ZXh0
LCAmY2xpZW50LCBtb2RlLCByZXF1ZXN0LCBEb05vdFNlbmRMb2FkQ2FsbGJhY2tzLCBjb250ZW50
U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKLQor
ICAgIFJlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBsb2FkZXIgPSBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyOjpjcmVhdGUod29ya2VyQ29udGV4dCwgJmNsaWVudCwgbW9kZSwgcmVxdWVzdCwg
b3B0aW9ucyk7CiAgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQgPSBNZXNzYWdlUXVl
dWVNZXNzYWdlUmVjZWl2ZWQ7CiAgICAgd2hpbGUgKCFsb2FkZXItPmRvbmUoKSAmJiByZXN1bHQg
IT0gTWVzc2FnZVF1ZXVlVGVybWluYXRlZCkKICAgICAgICAgcmVzdWx0ID0gcnVuTG9vcC5ydW5J
bk1vZGUod29ya2VyQ29udGV4dCwgbW9kZSk7CkBAIC05MSwyMSArODgsMjAgQEAgdm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlTG9hZGVyOjpjYW5jZWwoKQogfQogCiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
OjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJs
ZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclBy
b3h5JiBsb2FkZXJQcm94eSwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRl
bnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVGhyZWFkYWJsZUxvYWRl
ck9wdGlvbnMmIG9wdGlvbnMpCiAgICAgOiBtX3dvcmtlckNsaWVudFdyYXBwZXIod29ya2VyQ2xp
ZW50V3JhcHBlcikKICAgICAsIG1fbG9hZGVyUHJveHkobG9hZGVyUHJveHkpCiAgICAgLCBtX3Rh
c2tNb2RlKHRhc2tNb2RlLmNvcHkoKSkKIHsKICAgICBBU1NFUlQobV93b3JrZXJDbGllbnRXcmFw
cGVyLmdldCgpKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyLCB0aGlz
LCByZXF1ZXN0LCBjYWxsYmFja3NTZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRp
YWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0
VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRo
cmVhZENyZWF0ZUxvYWRlciwgdGhpcywgcmVxdWVzdCwgb3B0aW9ucykpOwogfQogCiBXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjp+TWFpblRocmVhZEJyaWRnZSgpCiB7
CiB9CiAKLXZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6bWFp
blRocmVhZENyZWF0ZUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBNYWlu
VGhyZWFkQnJpZGdlKiB0aGlzUHRyLCBhdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVz
dERhdGE+IHJlcXVlc3REYXRhLCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1NldHRpbmcsIENvbnRl
bnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxz
LCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kpCit2
b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRD
cmVhdGVMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRocmVhZEJy
aWRnZSogdGhpc1B0ciwgYXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBy
ZXF1ZXN0RGF0YSwgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwpA
QCAtMTE3LDcgKzExMyw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVh
ZEIKICAgICAvLyBGSVhNRTogSWYgdGhlIGEgc2l0ZSByZXF1ZXN0cyBhIGxvY2FsIHJlc291cmNl
LCB0aGVuIHRoaXMgd2lsbCByZXR1cm4gYSBub24temVybyB2YWx1ZSBidXQgdGhlIHN5bmMgcGF0
aAogICAgIC8vIHdpbGwgcmV0dXJuIGEgMCB2YWx1ZS4gIEVpdGhlciB0aGlzIHNob3VsZCByZXR1
cm4gMCBvciB0aGUgb3RoZXIgY29kZSBwYXRoIHNob3VsZCBkbyBhIGNhbGxiYWNrIHdpdGgKICAg
ICAvLyBhIGZhaWx1cmUuCi0gICAgdGhpc1B0ci0+bV9tYWluVGhyZWFkTG9hZGVyID0gVGhyZWFk
YWJsZUxvYWRlcjo6Y3JlYXRlKGNvbnRleHQsIHRoaXNQdHIsICpyZXF1ZXN0LCBjYWxsYmFja3NT
ZXR0aW5nLCBjb250ZW50U25pZmYsIHN0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGly
ZWN0UG9saWN5KTsKKyAgICB0aGlzUHRyLT5tX21haW5UaHJlYWRMb2FkZXIgPSBUaHJlYWRhYmxl
TG9hZGVyOjpjcmVhdGUoY29udGV4dCwgdGhpc1B0ciwgKnJlcXVlc3QsIG9wdGlvbnMpOwogICAg
IEFTU0VSVCh0aGlzUHRyLT5tX21haW5UaHJlYWRMb2FkZXIpOwogfQogCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNv
cmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
MTAgKzU1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFdvcmtlclRocmVh
ZGFibGVMb2FkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiwg
cHVibGljIFRocmVhZGFibGVMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIHZv
aWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShXb3JrZXJDb250ZXh0KiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCYsIFN0b3JlZENyZWRlbnRpYWxzLCBD
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29y
a2VyVGhyZWFkYWJsZUxvYWRlcj4gY3JlYXRlKFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQs
IFRocmVhZGFibGVMb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBMb2FkQ2FsbGJhY2tzIGNhbGxiYWNrc1Nl
dHRpbmcsIENvbnRlbnRTbmlmZiBjb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5IGNyb3NzT3JpZ2luUmVkaXJl
Y3RQb2xpY3kpCisgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
V29ya2VyQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFRocmVhZGFibGVMb2FkZXJD
bGllbnQmLCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXJUaHJlYWRhYmxlTG9hZGVyPiBjcmVhdGUoV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBTdHJp
bmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFRocmVh
ZGFibGVMb2FkZXJPcHRpb25zJiBvcHRpb25zKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZGFibGVMb2FkZXIod29ya2VyQ29udGV4dCwgY2xp
ZW50LCB0YXNrTW9kZSwgcmVxdWVzdCwgY2FsbGJhY2tzU2V0dGluZywgY29udGVudFNuaWZmLCBz
dG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeSkpOworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKHdvcmtlckNvbnRl
eHQsIGNsaWVudCwgdGFza01vZGUsIHJlcXVlc3QsIG9wdGlvbnMpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIH5Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyKCk7CkBAIC05Nyw3ICs5Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgY2xhc3MgTWFpblRocmVhZEJyaWRnZSA6IFRocmVhZGFi
bGVMb2FkZXJDbGllbnQgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAvLyBBbGwgZXhl
Y3V0ZWQgb24gdGhlIHdvcmtlciBjb250ZXh0J3MgdGhyZWFkLgotICAgICAgICAgICAgTWFpblRo
cmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiwgV29y
a2VyTG9hZGVyUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBD
cm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgICAgIE1haW5UaHJlYWRCcmlkZ2Uo
UGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4sIFdvcmtlckxvYWRlclBy
b3h5JiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsKICAgICAgICAgICAgIHZvaWQgY2FuY2VsKCk7
CiAgICAgICAgICAgICB2b2lkIGRlc3Ryb3koKTsKIApAQCAtMTA5LDcgKzEwOSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWREZXN0cm95
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKik7CiAgICAgICAgICAg
ICB+TWFpblRocmVhZEJyaWRnZSgpOwogCi0gICAgICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhy
ZWFkQ3JlYXRlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdl
Kiwgc3RkOjphdXRvX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+LCBMb2FkQ2Fs
bGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3JlZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGly
ZWN0UG9saWN5KTsKKyAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDcmVhdGVMb2Fk
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqLCBzdGQ6OmF1dG9f
cHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4sIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zKTsKICAgICAgICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDYW5jZWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIE1haW5UaHJlYWRCcmlkZ2UqKTsKICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwpAQCAtMTMzLDcgKzEz
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIFN0cmluZyBtX3Rhc2tNb2Rl
OwogICAgICAgICB9OwogCi0gICAgICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29u
dGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBMb2FkQ2FsbGJhY2tzLCBDb250ZW50U25pZmYsIFN0b3Jl
ZENyZWRlbnRpYWxzLCBDcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICAgICAgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxvYWRlckNsaWVudCos
IGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zJik7CiAKICAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+
IG1fd29ya2VyQ29udGV4dDsKICAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Ny
b3NzVGhyZWFkQ29waWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1Ro
cmVhZENvcGllci5oCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgU3RyaW5nOwogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291
cmNlUmVzcG9uc2VEYXRhOwogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERh
dGE7CisgICAgc3RydWN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyUGFzc1Rocm91Z2ggewogICAgICAg
ICB0eXBlZGVmIFQgVHlwZTsKQEAgLTY1LDYgKzY2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFs
c2UsIFQqPiA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllclBhc3NUaHJvdWdoPFQqPiB7CiAgICAg
fTsKIAorICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwg
VGhyZWFkYWJsZUxvYWRlck9wdGlvbnM+IDogcHVibGljIENyb3NzVGhyZWFkQ29waWVyUGFzc1Ro
cm91Z2g8VGhyZWFkYWJsZUxvYWRlck9wdGlvbnM+IHsKKyAgICB9OworCiAgICAgLy8gQ3VzdG9t
IGNvcHkgbWV0aG9kcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJl
YWRDb3BpZXJCYXNlPGZhbHNlLCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUPiA+ID4gewogICAg
ICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gVHlwZTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuY3BwCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUvd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSwxMyBAQCB2
b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNocm9ub3VzCiAgICAgICAgIHJldHVybjsK
IAogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7
Ci0gICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShz
dGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCksICpyZXF1
ZXN0LCAqdGhpcywgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgY3Jvc3NPcmlnaW5SZWRpcmVjdFBv
bGljeSk7CisKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlv
bnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVl
c3RQb2xpY3kgPSBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHM7CisgICAgb3B0aW9ucy5jcm9zc09y
aWdpblJlZGlyZWN0UG9saWN5ID0gY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeTsKKworICAgIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nh
c3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCAqcmVxdWVzdCwgKnRo
aXMsIG9wdGlvbnMpOwogfQogICAgIAogdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBLVVJMJiB1cmwsIENyb3NzT3JpZ2luUmVkaXJlY3RQb2xpY3kgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBjbGllbnQpCkBAIC03Miw3
ICs3OCwxMiBAQCB2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5jaHJvbm91CiAgICAg
aWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RocmVhZGFibGVMb2FkZXIg
PSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdGhpcywg
KnJlcXVlc3QsIERvTm90U2VuZExvYWRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBjcm9zc09yaWdpblJlZGlyZWN0UG9saWN5KTsKKyAgICBUaHJl
YWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFs
cyA9IHRydWU7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBBbGxvd0Ny
b3NzT3JpZ2luUmVxdWVzdHM7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlZGlyZWN0UG9saWN5
ID0gY3Jvc3NPcmlnaW5SZWRpcmVjdFBvbGljeTsKKworICAgIG1fdGhyZWFkYWJsZUxvYWRlciA9
IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB0aGlzLCAq
cmVxdWVzdCwgb3B0aW9ucyk7CiB9CiAKIFBhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBXb3Jr
ZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCgpCkluZGV4OiBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCShyZXZpc2lvbiA0NzI1MykKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkNhY2hlLmgi
CiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luQWNjZXNzQ29udHJv
bC5oIgotI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNs
dWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRXZlbnQuaCIKQEAgLTkzLDI1ICs5MiwyNSBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkVG9rZW4o
Y29uc3QgU3RyaW5nJiBuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgVUNoYXIg
YyA9IG5hbWVbaV07Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjID49IDEyNyB8fCBjIDw9IDMy
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBpZiAoYyA9
PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9PSAnPCcgfHwgYyA9PSAnPicgfHwgYyA9PSAnQCcgfHwK
ICAgICAgICAgICAgIGMgPT0gJywnIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xc
JyB8fCBjID09ICdcIicgfHwKICAgICAgICAgICAgIGMgPT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMg
PT0gJ10nIHx8IGMgPT0gJz8nIHx8IGMgPT0gJz0nIHx8CiAgICAgICAgICAgICBjID09ICd7JyB8
fCBjID09ICd9JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwogc3RhdGljIGJvb2wgaXNWYWxpZEhlYWRlclZhbHVl
KGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5
IG1hdGNoIG5hbWUgYWdhaW5zdCAKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IG1h
dGNoIG5hbWUgYWdhaW5zdAogICAgIC8vIGZpZWxkLXZhbHVlIGluIHNlY3Rpb24gNC4yIG9mIFJG
QyAyNjE2LgotICAgICAgICAKKwogICAgIHJldHVybiAhbmFtZS5jb250YWlucygnXHInKSAmJiAh
bmFtZS5jb250YWlucygnXG4nKTsKIH0KIApAQCAtMTQzLDkgKzE0Miw5IEBAIFhNTEh0dHBSZXF1
ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGUKICAgICAsIG1fcmVzcG9uc2VUZXh0KCIiKQog
ICAgICwgbV9jcmVhdGVkRG9jdW1lbnQoZmFsc2UpCiAgICAgLCBtX2Vycm9yKGZhbHNlKQorICAg
ICwgbV91cGxvYWRFdmVudHNBbGxvd2VkKHRydWUpCiAgICAgLCBtX3VwbG9hZENvbXBsZXRlKGZh
bHNlKQogICAgICwgbV9zYW1lT3JpZ2luUmVxdWVzdCh0cnVlKQotICAgICwgbV9pblByZWZsaWdo
dChmYWxzZSkKICAgICAsIG1fZGlkVGVsbExvYWRlckFib3V0UmVxdWVzdChmYWxzZSkKICAgICAs
IG1fcmVjZWl2ZWRMZW5ndGgoMCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKDApCkBAIC0y
MDcsNyArMjA2LDcgQEAgRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVhNTCgpIAog
ICAgICAgICAgICAgbV9yZXNwb25zZVhNTC0+d3JpdGUoU3RyaW5nKG1fcmVzcG9uc2VUZXh0KSk7
CiAgICAgICAgICAgICBtX3Jlc3BvbnNlWE1MLT5maW5pc2hQYXJzaW5nKCk7CiAgICAgICAgICAg
ICBtX3Jlc3BvbnNlWE1MLT5jbG9zZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlm
ICghbV9yZXNwb25zZVhNTC0+d2VsbEZvcm1lZCgpKQogICAgICAgICAgICAgICAgIG1fcmVzcG9u
c2VYTUwgPSAwOwogICAgICAgICB9CkBAIC0yMzYsNyArMjM1LDcgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6YWRkRXZlbnRMaXN0ZW5lcihjbwogICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpp
dGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9
IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpCiAgICAgICAgICAgICBpZiAoKmxpc3Rl
bmVySXRlciA9PSBldmVudExpc3RlbmVyKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCisKICAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKICAgICAgICAg
bV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwogICAgIH0KQEAgLTMy
MiwxMCArMzIxLDEwIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiAK
ICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAor
CiAgICAgLy8gTWV0aG9kIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gQnV0IHNpbmNlIEZpcmVm
b3ggdXBwZXJjYXNlcyBtZXRob2QgbmFtZXMgaXQga25vd3MsIHdlJ2xsIGRvIHRoZSBzYW1lLgog
ICAgIFN0cmluZyBtZXRob2RVcHBlcihtZXRob2QudXBwZXIoKSk7Ci0gICAgCisKICAgICBpZiAo
bWV0aG9kVXBwZXIgPT0gIlRSQUNFIiB8fCBtZXRob2RVcHBlciA9PSAiVFJBQ0siIHx8IG1ldGhv
ZFVwcGVyID09ICJDT05ORUNUIikgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzM1LDcgKzMzNCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4o
Y29uc3QgU3RyaW5nJiAKIAogICAgIGlmIChtZXRob2RVcHBlciA9PSAiQ09QWSIgfHwgbWV0aG9k
VXBwZXIgPT0gIkRFTEVURSIgfHwgbWV0aG9kVXBwZXIgPT0gIkdFVCIgfHwgbWV0aG9kVXBwZXIg
PT0gIkhFQUQiCiAgICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJJTkRFWCIgfHwgbWV0aG9kVXBw
ZXIgPT0gIkxPQ0siIHx8IG1ldGhvZFVwcGVyID09ICJNLVBPU1QiIHx8IG1ldGhvZFVwcGVyID09
ICJNS0NPTCIgfHwgbWV0aG9kVXBwZXIgPT0gIk1PVkUiCi0gICAgICAgIHx8IG1ldGhvZFVwcGVy
ID09ICJPUFRJT05TIiB8fCBtZXRob2RVcHBlciA9PSAiUE9TVCIgfHwgbWV0aG9kVXBwZXIgPT0g
IlBST1BGSU5EIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUFBBVENIIiB8fCBtZXRob2RVcHBlciA9
PSAiUFVUIiAKKyAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIk9QVElPTlMiIHx8IG1ldGhvZFVw
cGVyID09ICJQT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUEZJTkQiIHx8IG1ldGhvZFVwcGVy
ID09ICJQUk9QUEFUQ0giIHx8IG1ldGhvZFVwcGVyID09ICJQVVQiCiAgICAgICAgIHx8IG1ldGhv
ZFVwcGVyID09ICJVTkxPQ0siKQogICAgICAgICBtX21ldGhvZCA9IG1ldGhvZFVwcGVyOwogICAg
IGVsc2UKQEAgLTM1Nyw3ICszNTYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0
IFN0cmluZyYgCiB7CiAgICAgS1VSTCB1cmxXaXRoQ3JlZGVudGlhbHModXJsKTsKICAgICB1cmxX
aXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyKTsKLSAgICAKKwogICAgIG9wZW4obWV0aG9kLCB1
cmxXaXRoQ3JlZGVudGlhbHMsIGFzeW5jLCBlYyk7CiB9CiAKQEAgLTM2Niw3ICszNjUsNyBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAgICAgS1VSTCB1cmxXaXRo
Q3JlZGVudGlhbHModXJsKTsKICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0VXNlcih1c2VyKTsK
ICAgICB1cmxXaXRoQ3JlZGVudGlhbHMuc2V0UGFzcyhwYXNzd29yZCk7Ci0gICAgCisKICAgICBv
cGVuKG1ldGhvZCwgdXJsV2l0aENyZWRlbnRpYWxzLCBhc3luYywgZWMpOwogfQogCkBAIC00NjMs
MzQgKzQ2MiwyMyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEZpbGUqIGJvZHksIEV4CiAK
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgLy8gVXBsb2FkIGV2ZW50IGxpc3RlbmVycyBzaG91bGQgYmUgZGlzYWxsb3dlZCBmb3Ig
c2ltcGxlIGNyb3NzLW9yaWdpbiByZXF1ZXN0cywgYmVjYXVzZSBQT1NUaW5nIHRvIGFuIFVSTCB0
aGF0IGRvZXMgbm90Ci0gICAgLy8gcGVybWl0IGNyb3NzIG9yaWdpbiByZXF1ZXN0cyBzaG91bGQg
bG9vayBleGFjdGx5IGxpa2UgUE9TVGluZyB0byBhbiBVUkwgdGhhdCBkb2VzIG5vdCByZXNwb25k
IGF0IGFsbC4gSWYgYSBsaXN0ZW5lciBleGlzdHMKLSAgICAvLyB3aGVuIGNyZWF0aW5nIHRoZSBy
ZXF1ZXN0LCBpdCB3aWxsIGZvcmNlIHByZWZsaWdodC4KKyAgICAvLyBUaGUgcHJlc2VuY2Ugb2Yg
dXBsb2FkIGV2ZW50IGxpc3RlbmVycyBmb3JjZXMgdXMgdG8gdXNlIHByZWZsaWdodGluZyBiZWNh
dXNlIFBPU1RpbmcgdG8gYW4gVVJMIHRoYXQgZG9lcyBub3QKKyAgICAvLyBwZXJtaXQgY3Jvc3Mg
b3JpZ2luIHJlcXVlc3RzIHNob3VsZCBsb29rIGV4YWN0bHkgbGlrZSBQT1NUaW5nIHRvIGFuIFVS
TCB0aGF0IGRvZXMgbm90IHJlc3BvbmQgYXQgYWxsLgogICAgIC8vIEFsc28sIG9ubHkgYXN5bmMg
cmVxdWVzdHMgc3VwcG9ydCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzLgotICAgIG1fdXBsb2FkRXZl
bnRzQWxsb3dlZCA9IGZhbHNlOworICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKICAg
ICBpZiAobV9hc3luYykgewogICAgICAgICBkaXNwYXRjaExvYWRTdGFydEV2ZW50KCk7CiAgICAg
ICAgIGlmIChtX3JlcXVlc3RFbnRpdHlCb2R5ICYmIG1fdXBsb2FkKSB7Ci0gICAgICAgICAgICBt
X3VwbG9hZEV2ZW50c0FsbG93ZWQgPSBtX3VwbG9hZC0+aGFzTGlzdGVuZXJzKCk7CisgICAgICAg
ICAgICBmb3JjZVByZWZsaWdodCA9IG1fdXBsb2FkLT5oYXNMaXN0ZW5lcnMoKTsKICAgICAgICAg
ICAgIG1fdXBsb2FkLT5kaXNwYXRjaExvYWRTdGFydEV2ZW50KCk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBtX3NhbWVPcmlnaW5SZXF1ZXN0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKTsKIAotICAgIGlmICghbV9zYW1lT3Jp
Z2luUmVxdWVzdCkgewotICAgICAgICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGVjKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9IHRy
dWU7Ci0KLSAgICBtYWtlU2FtZU9yaWdpblJlcXVlc3QoZWMpOwotfQotCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjptYWtlU2FtZU9yaWdpblJlcXVlc3QoRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
QVNTRVJUKG1fc2FtZU9yaWdpblJlcXVlc3QpOworICAgIC8vIFdlIGFsc28gcmVtZW1iZXIgd2hl
dGhlciB1cGxvYWQgZXZlbnRzIHNob3VsZCBiZSBhbGxvd2VkIGZvciB0aGlzIHJlcXVlc3QgaW4g
Y2FzZSB0aGUgdXBsb2FkIGxpc3RlbmVycyBhcmUKKyAgICAvLyBhZGRlZCBhZnRlciB0aGUgcmVx
dWVzdCBpcyBzdGFydGVkLgorICAgIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9ICFpc1NpbXBsZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdChtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycyk7CiAKICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3VybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1fbWV0aG9kKTsKQEAgLTUwNCwyMDIgKzQ5MiwyOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjptYWtlU2FtZU9yaWdpblJlcXVlCiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4g
MCkKICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMp
OwogCi0gICAgaWYgKG1fYXN5bmMpCi0gICAgICAgIGxvYWRSZXF1ZXN0QXN5bmNocm9ub3VzbHko
cmVxdWVzdCk7Ci0gICAgZWxzZQotICAgICAgICBsb2FkUmVxdWVzdFN5bmNocm9ub3VzbHkocmVx
dWVzdCwgZWMpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjptYWtlQ3Jvc3NPcmlnaW5BY2Nl
c3NSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVCghbV9zYW1lT3JpZ2lu
UmVxdWVzdCk7Ci0KLSAgICBpZiAoIW1fdXBsb2FkRXZlbnRzQWxsb3dlZCAmJiBpc1NpbXBsZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdChtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykpCi0gICAg
ICAgIG1ha2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoZWMpOwotICAgIGVsc2UKLSAg
ICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoZWMpOwotfQot
Ci12b2lkIFhNTEh0dHBSZXF1ZXN0OjptYWtlU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0
KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVChpc1NpbXBsZUNyb3NzT3JpZ2luQWNj
ZXNzUmVxdWVzdChtX21ldGhvZCwgbV9yZXF1ZXN0SGVhZGVycykpOworICAgIFRocmVhZGFibGVM
b2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRy
dWU7CisgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmZvcmNl
UHJlZmxpZ2h0ID0gZm9yY2VQcmVmbGlnaHQ7CisgICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxz
ID0gbV9zYW1lT3JpZ2luUmVxdWVzdCB8fCBtX2luY2x1ZGVDcmVkZW50aWFsczsKKyAgICBvcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IFVzZUFjY2Vzc0NvbnRyb2w7CisgICAgb3B0
aW9ucy5jcm9zc09yaWdpblJlZGlyZWN0UG9saWN5ID0gRGVueUNyb3NzT3JpZ2luUmVkaXJlY3Q7
CiAKLSAgICAvLyBDcm9zcy1vcmlnaW4gcmVxdWVzdHMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgSFRU
UC4gV2Ugd291bGQgY2F0Y2ggdGhpcyB3aGVuIGNoZWNraW5nIHJlc3BvbnNlIGhlYWRlcnMgbGF0
ZXIsIGJ1dCB0aGVyZSBpcyBubyByZWFzb24gdG8gc2VuZCBhIHJlcXVlc3QgdGhhdCdzIGd1YXJh
bnRlZWQgdG8gYmUgZGVuaWVkLgotICAgIGlmICghbV91cmwucHJvdG9jb2xJbkhUVFBGYW1pbHko
KSkgewotICAgICAgICBlYyA9IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uOjpORVRXT1JLX0VSUjsK
LSAgICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBL
VVJMIHVybCA9IG1fdXJsOwotICAgIHVybC5zZXRVc2VyKFN0cmluZygpKTsKLSAgICB1cmwuc2V0
UGFzcyhTdHJpbmcoKSk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotICAg
IHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtX21ldGhvZCk7Ci0gICAgcmVxdWVzdC5zZXRBbGxvd0hU
VFBDb29raWVzKG1faW5jbHVkZUNyZWRlbnRpYWxzKTsKLSAgICByZXF1ZXN0LnNldEhUVFBPcmln
aW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
KTsKLQotICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCi0gICAgICAgIHJlcXVl
c3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLQotICAgIGlmIChtX3Jl
cXVlc3RFbnRpdHlCb2R5KSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiR0VUIik7Ci0g
ICAgICAgIEFTU0VSVChtX21ldGhvZCAhPSAiSEVBRCIpOwotICAgICAgICByZXF1ZXN0LnNldEhU
VFBCb2R5KG1fcmVxdWVzdEVudGl0eUJvZHkucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9hc3luYykKLSAgICAgICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShyZXF1ZXN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIGxvYWRSZXF1ZXN0U3luY2hyb25vdXNseShyZXF1ZXN0LCBlYyk7Ci19
Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRo
UHJlZmxpZ2h0KEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFN0cmluZyBvcmlnaW4gPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7Ci0gICAg
S1VSTCB1cmwgPSBtX3VybDsKLSAgICB1cmwuc2V0VXNlcihTdHJpbmcoKSk7Ci0gICAgdXJsLnNl
dFBhc3MoU3RyaW5nKCkpOwotCi0gICAgaWYgKCFDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KG9yaWdpbiwgdXJsLCBtX2luY2x1ZGVDcmVk
ZW50aWFscywgbV9tZXRob2QsIG1fcmVxdWVzdEhlYWRlcnMpKSB7Ci0gICAgICAgIG1faW5QcmVm
bGlnaHQgPSB0cnVlOwotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcHJlZmxpZ2h0UmVxdWVzdCh1
cmwpOwotICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBNZXRob2QoIk9QVElPTlMiKTsK
LSAgICAgICAgcHJlZmxpZ2h0UmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIk9yaWdpbiIsIG9y
aWdpbik7Ci0gICAgICAgIHByZWZsaWdodFJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJBY2Nl
c3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCIsIG1fbWV0aG9kKTsKLQotICAgICAgICBpZiAobV9y
ZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBWZWN0b3I8VUNoYXI+IGhl
YWRlckJ1ZmZlcjsKLSAgICAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9yZXF1ZXN0SGVhZGVycy5iZWdpbigpOwotICAgICAgICAgICAgYXBwZW5kKGhlYWRlckJ1
ZmZlciwgaXQtPmZpcnN0KTsKLSAgICAgICAgICAgICsraXQ7Ci0KLSAgICAgICAgICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdEhlYWRlcnMuZW5kKCk7Ci0g
ICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaGVh
ZGVyQnVmZmVyLmFwcGVuZCgnLCcpOwotICAgICAgICAgICAgICAgIGhlYWRlckJ1ZmZlci5hcHBl
bmQoJyAnKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQoaGVhZGVyQnVmZmVyLCBpdC0+Zmlyc3Qp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmVmbGlnaHRSZXF1ZXN0LnNldEhUVFBI
ZWFkZXJGaWVsZCgiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzIiwgU3RyaW5nOjphZG9w
dChoZWFkZXJCdWZmZXIpKTsKLSAgICAgICAgICAgIHByZWZsaWdodFJlcXVlc3QuYWRkSFRUUEhl
YWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
X2FzeW5jKSB7Ci0gICAgICAgICAgICBtX3VwbG9hZEV2ZW50c0FsbG93ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShwcmVmbGlnaHRSZXF1ZXN0KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvYWRSZXF1ZXN0U3luY2hy
b25vdXNseShwcmVmbGlnaHRSZXF1ZXN0LCBlYyk7Ci0gICAgICAgIG1faW5QcmVmbGlnaHQgPSBm
YWxzZTsKLQotICAgICAgICBpZiAoZWMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gU2VuZCB0aGUgYWN0dWFsIHJlcXVlc3QuCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QodXJsKTsKLSAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobV9tZXRob2QpOwotICAgIHJlcXVl
c3Quc2V0QWxsb3dIVFRQQ29va2llcyhtX2luY2x1ZGVDcmVkZW50aWFscyk7Ci0gICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoIk9yaWdpbiIsIG9yaWdpbik7Ci0KLSAgICBpZiAobV9yZXF1
ZXN0SGVhZGVycy5zaXplKCkgPiAwKQotICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVs
ZHMobV9yZXF1ZXN0SGVhZGVycyk7Ci0KLSAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9keSkgewot
ICAgICAgICBBU1NFUlQobV9tZXRob2QgIT0gIkdFVCIpOwotICAgICAgICBBU1NFUlQobV9tZXRo
b2QgIT0gIkhFQUQiKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShtX3JlcXVlc3RFbnRp
dHlCb2R5LnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIG1fZXhjZXB0aW9uQ29kZSA9IDA7CisgICAg
bV9lcnJvciA9IGZhbHNlOwogCiAgICAgaWYgKG1fYXN5bmMpIHsKLSAgICAgICAgbV91cGxvYWRF
dmVudHNBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgbG9hZFJlcXVlc3RBc3luY2hyb25vdXNseShy
ZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvYWRSZXF1ZXN0U3luY2hy
b25vdXNseShyZXF1ZXN0LCBlYyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmhhbmRsZUFz
eW5jaHJvbm91c1ByZWZsaWdodFJlc3VsdCgpCi17Ci0gICAgQVNTRVJUKG1faW5QcmVmbGlnaHQp
OwotICAgIEFTU0VSVChtX2FzeW5jKTsKLQotICAgIG1faW5QcmVmbGlnaHQgPSBmYWxzZTsKLQot
ICAgIEtVUkwgdXJsID0gbV91cmw7Ci0gICAgdXJsLnNldFVzZXIoU3RyaW5nKCkpOwotICAgIHVy
bC5zZXRQYXNzKFN0cmluZygpKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCk7
Ci0gICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICByZXF1ZXN0LnNldEFs
bG93SFRUUENvb2tpZXMobV9pbmNsdWRlQ3JlZGVudGlhbHMpOwotICAgIHJlcXVlc3Quc2V0SFRU
UE9yaWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCkpOwotCi0gICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkKLSAgICAgICAg
cmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwotCi0gICAgaWYg
KG1fcmVxdWVzdEVudGl0eUJvZHkpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJHRVQi
KTsKLSAgICAgICAgQVNTRVJUKG1fbWV0aG9kICE9ICJIRUFEIik7Ci0gICAgICAgIHJlcXVlc3Qu
c2V0SFRUUEJvZHkobV9yZXF1ZXN0RW50aXR5Qm9keS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IG1fdXBsb2FkRXZlbnRzQWxsb3dlZCA9IHRydWU7Ci0gICAgbG9hZFJlcXVlc3RBc3luY2hyb25v
dXNseShyZXF1ZXN0KTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bG9hZFJlcXVlc3RTeW5j
aHJvbm91c2x5KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgQVNTRVJUKCFtX2FzeW5jKTsKLQotICAgIG1fbG9hZGVyID0gMDsKLSAgICBtX2V4Y2Vw
dGlvbkNvZGUgPSAwOwotICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0g
KG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHMpID8gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICAgICAgcmVx
dWVzdC5zZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyh0cnVlKTsKKyAgICAgICAgc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworICAgICAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOworICAg
IH0gZWxzZQorICAgICAgICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOwog
Ci0gICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHJlcXVlc3QsICp0aGlzLCBzdG9yZWRDcmVkZW50aWFscyk7CiAg
ICAgaWYgKCFtX2V4Y2VwdGlvbkNvZGUgJiYgbV9lcnJvcikKICAgICAgICAgbV9leGNlcHRpb25D
b2RlID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5FVFdPUktfRVJSOwogICAgIGVjID0gbV9l
eGNlcHRpb25Db2RlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpsb2FkUmVxdWVzdEFzeW5j
aHJvbm91c2x5KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQobV9hc3lu
Yyk7Ci0gICAgbV9leGNlcHRpb25Db2RlID0gMDsKLSAgICAvLyBTdWJyZXNvdXJjZUxvYWRlcjo6
Y3JlYXRlIGNhbiByZXR1cm4gbnVsbCBoZXJlLCBmb3IgZXhhbXBsZSBpZiB3ZSdyZSBubyBsb25n
ZXIgYXR0YWNoZWQgdG8gYSBwYWdlLgotICAgIC8vIFRoaXMgaXMgdHJ1ZSB3aGlsZSBydW5uaW5n
IG9udW5sb2FkIGhhbmRsZXJzLgotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJlIGFibGUgdG8g
c2VuZCBYTUxIdHRwUmVxdWVzdHMgZnJvbSBvbnVubG9hZCwgPGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwOTA0Pi4KLSAgICAvLyBGSVhNRTogTWF5YmUgY3JlYXRlIGNh
biByZXR1cm4gbnVsbCBmb3Igb3RoZXIgcmVhc29ucyB0b28/Ci0gICAgTG9hZENhbGxiYWNrcyBj
YWxsYmFja3MgPSBtX2luUHJlZmxpZ2h0ID8gRG9Ob3RTZW5kTG9hZENhbGxiYWNrcyA6IFNlbmRM
b2FkQ2FsbGJhY2tzOwotICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0g
KG1fc2FtZU9yaWdpblJlcXVlc3QgfHwgbV9pbmNsdWRlQ3JlZGVudGlhbHMpID8gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLQotICAgIGlmICht
X3VwbG9hZCkKLSAgICAgICAgcmVxdWVzdC5zZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyh0cnVlKTsK
LQotICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgdGhpcywgcmVxdWVzdCwgY2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwg
c3RvcmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0KTsKLQotICAgIGlmICht
X2xvYWRlcikgewotICAgICAgICAvLyBOZWl0aGVyIHRoaXMgb2JqZWN0IG5vciB0aGUgSmF2YVNj
cmlwdCB3cmFwcGVyIHNob3VsZCBiZSBkZWxldGVkIHdoaWxlCi0gICAgICAgIC8vIGEgcmVxdWVz
dCBpcyBpbiBwcm9ncmVzcyBiZWNhdXNlIHdlIG5lZWQgdG8ga2VlcCB0aGUgbGlzdGVuZXJzIGFs
aXZlLAotICAgICAgICAvLyBhbmQgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0aGUgSmF2YVNjcmlw
dCB3cmFwcGVyLgotICAgICAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBGb3Igbm93IHdlIHNob3VsZCBvbmx5IGJhbGFuY2UgdGhlIG5vbkNhY2hlZCBy
ZXF1ZXN0IGNvdW50IGZvciBtYWluLXRocmVhZCBYSFJzIGFuZCBub3QKLSAgICAgICAgLy8gV29y
a2VyIFhIUnMsIGFzIHRoZSBDYWNoZSBpcyBub3QgdGhyZWFkLXNhZmUuCi0gICAgICAgIC8vIFRo
aXMgd2lsbCBiZWNvbWUgaXJyZWxldmFudCBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjcxNjUgaXMgcmVzb2x2ZWQuCi0gICAgICAgIGlmICghc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkgewotICAgICAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kaWRUZWxsTG9hZGVyQWJv
dXRSZXF1ZXN0KTsKLSAgICAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVl
c3RJbkZsaWdodChtX3VybCk7Ci0gICAgICAgICAgICBtX2RpZFRlbGxMb2FkZXJBYm91dFJlcXVl
c3QgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojph
Ym9ydCgpCiB7CiAgICAgLy8gaW50ZXJuYWxBYm9ydCgpIGNhbGxzIGRyb3BQcm90ZWN0aW9uKCks
IHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KQEAgLTcxMSw3ICs1MjYsNyBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAKICAgICAvLyBDbGVhciBoZWFkZXJzIGFz
IHJlcXVpcmVkIGJ5IHRoZSBzcGVjCiAgICAgbV9yZXF1ZXN0SGVhZGVycy5jbGVhcigpOwotICAg
IAorCiAgICAgaWYgKChtX3N0YXRlIDw9IE9QRU5FRCAmJiAhc2VuZEZsYWcpIHx8IG1fc3RhdGUg
PT0gRE9ORSkKICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICBlbHNlIHsKQEAgLTc5NCw3
ICs2MDksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydEVycm9yKCkKICAgICB9CiB9CiAK
LXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkgICAgICAgIAordm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogewogI2lmIFVTRShKU0MpCiAgICAgLy8gVGhl
IFhIUiBvYmplY3QgaXRzZWxmIGhvbGRzIG9uIHRvIHRoZSByZXNwb25zZVRleHQsIGFuZApAQCAt
ODU0LDcgKzY2OSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoY28K
IAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBwYWlyPEhUVFBI
ZWFkZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX3JlcXVlc3RIZWFkZXJzLmFkZChu
YW1lLCB2YWx1ZSk7IAorICAgIHBhaXI8SFRUUEhlYWRlck1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IG1fcmVxdWVzdEhlYWRlcnMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpCiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZTsK
IH0KQEAgLTkzOSw3ICs3NTQsNyBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlTUlN
RVR5cGUoCiAgICAgfQogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIG1pbWVU
eXBlID0gInRleHQveG1sIjsKLSAgICAKKwogICAgIHJldHVybiBtaW1lVHlwZTsKIH0KIApAQCAt
OTgxLDcgKzc5Niw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3UK
ICAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPm5vbkNhY2hlUmVxdWVzdENvbXBsZXRlKG1fdXJs
KTsKICAgICAgICAgbV9kaWRUZWxsTG9hZGVyQWJvdXRSZXF1ZXN0ID0gZmFsc2U7CiAgICAgfQot
ICAgIAorCiAgICAgLy8gSWYgd2UgYXJlIGFscmVhZHkgaW4gYW4gZXJyb3Igc3RhdGUsIGZvciBp
bnN0YW5jZSB3ZSBjYWxsZWQgYWJvcnQoKSwgYmFpbCBvdXQgZWFybHkuCiAgICAgaWYgKG1fZXJy
b3IpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMTEsMTEgKzgyNiw2IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAgICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW5QcmVmbGlnaHQpIHsKLSAgICAgICAgZGlkRmluaXNoTG9hZGlu
Z1ByZWZsaWdodCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKG1fc3RhdGUg
PCBIRUFERVJTX1JFQ0VJVkVEKQogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVE
KTsKIApAQCAtMTAzNSwxOSArODQ1LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNo
TG9hZGluZyh1bgogICAgICAgICBkcm9wUHJvdGVjdGlvbigpOwogfQogCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nUHJlZmxpZ2h0KCkKLXsKLSAgICBBU1NFUlQobV9pblBy
ZWZsaWdodCk7Ci0gICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1ZXN0KTsKLQotICAgIC8vIEZJ
WE1FOiB0aGlzIGNhbiBwcm9iYWJseSBiZSBtb3ZlZCB0byBkaWRSZWNlaXZlUmVzcG9uc2VQcmVm
bGlnaHQuCi0gICAgaWYgKG1fYXN5bmMpCi0gICAgICAgIGhhbmRsZUFzeW5jaHJvbm91c1ByZWZs
aWdodFJlc3VsdCgpOwotCi0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKLX0KLQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkU2VuZERhdGEodW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCkKIHsKICAgICBpZiAoIW1fdXBsb2FkKQpAQCAtMTA2NSw0NSArODYyLDEyIEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKHVuc2lnbmUKIAogdm9pZCBYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewotICAgIGlmIChtX2luUHJlZmxpZ2h0KSB7Ci0gICAgICAgIGRpZFJlY2VpdmVSZXNwb25z
ZVByZWZsaWdodChyZXNwb25zZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fc2FtZU9yaWdpblJlcXVlc3QpIHsKLSAgICAgICAgaWYgKCFwYXNzZXNBY2Nlc3NDb250cm9s
Q2hlY2socmVzcG9uc2UsIG1faW5jbHVkZUNyZWRlbnRpYWxzLCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrRXJyb3IoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQogICAgIG1fcmVzcG9uc2Ug
PSByZXNwb25zZTsKICAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSBleHRyYWN0Q2hhcnNldEZyb21N
ZWRpYVR5cGUobV9taW1lVHlwZU92ZXJyaWRlKTsKICAgICBpZiAobV9yZXNwb25zZUVuY29kaW5n
LmlzRW1wdHkoKSkKICAgICAgICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSgpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlUmVzcG9u
c2VQcmVmbGlnaHQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgQVNT
RVJUKG1faW5QcmVmbGlnaHQpOwotICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7Ci0K
LSAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9pbmNsdWRlQ3Jl
ZGVudGlhbHMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpIHsK
LSAgICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBP
d25QdHI8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+IHByZWZsaWdodFJlc3Vs
dChuZXcgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0obV9pbmNsdWRlQ3JlZGVu
dGlhbHMpKTsKLSAgICBpZiAoIXByZWZsaWdodFJlc3VsdC0+cGFyc2UocmVzcG9uc2UpCi0gICAg
ICAgIHx8ICFwcmVmbGlnaHRSZXN1bHQtPmFsbG93c0Nyb3NzT3JpZ2luTWV0aG9kKG1fbWV0aG9k
KQotICAgICAgICB8fCAhcHJlZmxpZ2h0UmVzdWx0LT5hbGxvd3NDcm9zc09yaWdpbkhlYWRlcnMo
bV9yZXF1ZXN0SGVhZGVycykpIHsKLSAgICAgICAgbmV0d29ya0Vycm9yKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFy
ZWQoKS5hcHBlbmRFbnRyeShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCksIG1fdXJsLCBwcmVmbGlnaHRSZXN1bHQucmVsZWFzZSgpKTsKLX0KLQog
dm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9u
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGZhaWx1cmVSZXNwb25zZSkKIHsKICAgICBtX3Jlc3Bv
bnNlID0gZmFpbHVyZVJlc3BvbnNlOwpAQCAtMTExMSwxMiArODc1LDEyIEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZFJlY2VpdmVBdXRoZW50aWMKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKLSAgICBpZiAobV9pblBy
ZWZsaWdodCB8fCBtX2Vycm9yKQorICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobV9zdGF0ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0YXRl
KEhFQURFUlNfUkVDRUlWRUQpOwotICAKKwogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAg
IGlmICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZGVjb2Rl
ciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsIG1fcmVzcG9uc2VF
bmNvZGluZyk7CkBAIC0xMjEwLDcgKzk3NCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpc3Bh
dGNoTG9hZFN0YXJ0RXYKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlzcGF0Y2hQcm9ncmVzc0V2
ZW50KGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCkKIHsKLSAgICBkaXNwYXRjaFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudChtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKSwgZXZlbnROYW1lcygp
LnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVjZWl2ZWRMZW5ndGggPD0gZXhw
ZWN0ZWRMZW5ndGgsIAorICAgIGRpc3BhdGNoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KG1f
b25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpLCBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgZXhw
ZWN0ZWRMZW5ndGggJiYgbV9yZWNlaXZlZExlbmd0aCA8PSBleHBlY3RlZExlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9yZWNlaXZlZExlbmd0aCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHBlY3RlZExlbmd0aCkp
OwogfQogCkBAIC0xMjM1LDQgKzk5OSw0IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFhNTEh0
dHBSZXF1ZXN0OjoKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUgCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDQ3MjUzKQorKysgV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7Ci0gICAgCisKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0K
IApAQCAtMTM1LDEwICsxMzUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
UmVkaXJlY3RDaGVjaygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgLy8gU3BlY2lh
bCB2ZXJzaW9ucyBmb3IgdGhlIHByZWZsaWdodAotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
UHJlZmxpZ2h0KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmdQcmVmbGlnaHQoKTsKLQogICAgIHZvaWQgdXBkYXRlQW5kRGlzcGF0Y2hPblByb2dyZXNz
KHVuc2lnbmVkIGludCBsZW4pOwogCiAgICAgU3RyaW5nIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25z
dDsKQEAgLTE1OSwxNiArMTU1LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlUmVxdWVz
dChFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIG1ha2VTYW1lT3JpZ2luUmVxdWVzdChFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIHZvaWQgbWFrZVNpbXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVz
dChFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0
V2l0aFByZWZsaWdodChFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBoYW5kbGVBc3luY2hyb25v
dXNQcmVmbGlnaHRSZXN1bHQoKTsKLQotICAgIHZvaWQgbG9hZFJlcXVlc3RTeW5jaHJvbm91c2x5
KFJlc291cmNlUmVxdWVzdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGxvYWRSZXF1ZXN0
QXN5bmNocm9ub3VzbHkoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0KICAgICB2b2lkIGdlbmVyaWNFcnJv
cigpOwogICAgIHZvaWQgbmV0d29ya0Vycm9yKCk7CiAgICAgdm9pZCBhYm9ydEVycm9yKCk7CkBA
IC0yMjMsMTMgKzIwOSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91cGxvYWRDb21wbGV0ZTsK
IAogICAgIGJvb2wgbV9zYW1lT3JpZ2luUmVxdWVzdDsKLSAgICBib29sIG1fYWxsb3dBY2Nlc3M7
Ci0gICAgYm9vbCBtX2luUHJlZmxpZ2h0OwogICAgIGJvb2wgbV9kaWRUZWxsTG9hZGVyQWJvdXRS
ZXF1ZXN0OwogCiAgICAgLy8gVXNlZCBmb3Igb25wcm9ncmVzcyB0cmFja2luZwogICAgIGxvbmcg
bG9uZyBtX3JlY2VpdmVkTGVuZ3RoOwotICAgIAorCiAgICAgdW5zaWduZWQgbV9sYXN0U2VuZExp
bmVOdW1iZXI7CiAgICAgU3RyaW5nIG1fbGFzdFNlbmRVUkw7CiAgICAgRXhjZXB0aW9uQ29kZSBt
X2V4Y2VwdGlvbkNvZGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>