<?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>86306</bug_id>
          
          <creation_ts>2012-05-12 16:52:51 -0700</creation_ts>
          <short_desc>DFG should be able to optimize foo.apply(bar, arguments)</short_desc>
          <delta_ts>2012-05-23 17:04:49 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>622428</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-12 16:52:51 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622429</commentid>
    <comment_count>1</comment_count>
      <attachid>141589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-12 16:54:44 -0700</bug_when>
    <thetext>Created attachment 141589
work in progress

Still testing this monstrosity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622470</commentid>
    <comment_count>2</comment_count>
      <attachid>141597</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-12 21:41:16 -0700</bug_when>
    <thetext>Created attachment 141597
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622519</commentid>
    <comment_count>3</comment_count>
      <attachid>141610</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 12:03:48 -0700</bug_when>
    <thetext>Created attachment 141610
the patch

Made some refinements to the way that CFG simplification treats captured variables.  Previously I thought that it would be fine for CFG simplification to not do any fix-up to captured vars after merging basic blocks.  But now I think that it&apos;s cleaner if we preserve the invariant that even for captured vars, a GetLocal refers to the first prior access to the same variable, thereby ensuring that (1) we have a clean way of seeing the liveness of variables and (2) the unification-based variable splitting &quot;just works&quot;.  Of course, the latter is only needed prior to CFG simplification, but I like the idea of CFG simplification producing a graph that is strictly more tidy than the one it received.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622523</commentid>
    <comment_count>4</comment_count>
      <attachid>141610</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-13 12:42:14 -0700</bug_when>
    <thetext>Comment on attachment 141610
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=141610&amp;action=review

&gt; Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:556
&gt; +                if (false &amp;&amp; node.variableAccessData()-&gt;isCaptured())
&gt; +                    break;
&gt; +                

false? this seems bogus :D

&gt; Source/JavaScriptCore/dfg/DFGCapabilities.h:-198
&gt; -        return false;

What&apos;s this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622526</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 12:58:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 141610 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141610&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:556
&gt; &gt; +                if (false &amp;&amp; node.variableAccessData()-&gt;isCaptured())
&gt; &gt; +                    break;
&gt; &gt; +                
&gt; 
&gt; false? this seems bogus :D
&gt; 

Ooops!  I meant to kill that entire if statement rather than just turn it into a no-op.

&gt; &gt; Source/JavaScriptCore/dfg/DFGCapabilities.h:-198
&gt; &gt; -        return false;
&gt; 
&gt; What&apos;s this change?

That return was redundant.  If you look at the surrounding code, there&apos;s a return false below that this would fall-through to anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622529</commentid>
    <comment_count>6</comment_count>
      <attachid>141611</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 13:30:15 -0700</bug_when>
    <thetext>Created attachment 141611
the patch

Removed the &quot;if (false &amp;&amp; ...&quot; thingy that Oliver pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622555</commentid>
    <comment_count>7</comment_count>
      <attachid>141611</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-13 16:09:22 -0700</bug_when>
    <thetext>Comment on attachment 141611
the patch

For some reason this patch doesn’t apply so the EWS is not working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622556</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 16:11:23 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 141611 [details])
&gt; For some reason this patch doesn’t apply so the EWS is not working.

All is well - this patch is for the dfgopt branch.  So EWS won&apos;t be able to do anything about it, since the branch has diverged just enough that new DFG patches are unlikely to apply on trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622582</commentid>
    <comment_count>9</comment_count>
      <attachid>141619</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 17:02:40 -0700</bug_when>
    <thetext>Created attachment 141619
the patch

I forgot that optimizing op_call_varargs to use arguments directly implies that we need to first check that the arguments object has not been created.  This revised version of the patch does this, though imperfectly; the only hole (use of static speculation) will be fixed in https://bugs.webkit.org/show_bug.cgi?id=86327.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622597</commentid>
    <comment_count>10</comment_count>
      <attachid>141619</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-13 18:23:44 -0700</bug_when>
    <thetext>Comment on attachment 141619
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=141619&amp;action=review

&gt; Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:72
&gt; +                        

You probably didn&apos;t mean to do this.

&gt; Source/JavaScriptCore/dfg/DFGCapabilities.cpp:45
&gt; +    UNUSED_PARAM(result);

This is redundant (*shrug* :-) ).

&gt; Source/JavaScriptCore/dfg/DFGDriver.cpp:53
&gt; +    

Probably want to revert this file.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:948
&gt; +    

Again probably want to revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622598</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 18:31:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 141619 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141619&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:72
&gt; &gt; +                        
&gt; 
&gt; You probably didn&apos;t mean to do this.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCapabilities.cpp:45
&gt; &gt; +    UNUSED_PARAM(result);
&gt; 
&gt; This is redundant (*shrug* :-) ).
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGDriver.cpp:53
&gt; &gt; +    
&gt; 
&gt; Probably want to revert this file.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:948
&gt; &gt; +    
&gt; 
&gt; Again probably want to revert.

Thanks for catching the redundancies!  I&apos;ve removed them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622599</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 18:42:28 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 141619 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141619&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp:72
&gt; &gt; +                        
&gt; 
&gt; You probably didn&apos;t mean to do this.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCapabilities.cpp:45
&gt; &gt; +    UNUSED_PARAM(result);
&gt; 
&gt; This is redundant (*shrug* :-) ).

Ooops!  Nope, it isn&apos;t.  The issue is that the only other use of it is the ASSERT.  So I have a choice between switching the ASSERT to ASSERT_UNUSED or keeping the UNUSED_PARAM.  I like keeping the UNUSED_PARAM better because the whole point of passing the result into this method is so that the verbose mode can use it to print things.  Hence, the UNUSED_PARAM on the #else case of the DEBUG_VERBOSE check, as opposed to an ASSERT_UNUSED that is unguarded by any other checks, is serving a useful purpose: if when building with DEBUG_VERBOSE mode the compiler finds that result is unused, then it should flag an error, which will hopefully serve as a signal to the hacker that he should remove the result argument altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622614</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-13 19:19:35 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/116912</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632212</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-23 17:04:49 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/118270</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141589</attachid>
            <date>2012-05-12 16:54:44 -0700</date>
            <delta_ts>2012-05-12 21:41:16 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>foo_apply_bar_arguments_patch_1.diff</filename>
            <type>text/plain</type>
            <size>32933</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2ODYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEyLTA1LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIGZvby5hcHBseShiYXIsIGFyZ3VtZW50cykK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MzA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
b3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6Y2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREZHSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREZHKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERG
R1N0YXRlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoRXZhbENvZGVC
bG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAg
ICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6Zml4UG9zc2libGVHZXRMb2NhbCk6CisgICAgICAg
ICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0
TG9jYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoQ1NFUGhhc2UpOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpkZWJ1Z0ZhaWwpOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5D
b21waWxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2Rlcyk6Cisg
ICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNv
bXBpbGVPcGNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZSk6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVPcGNvZGVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpjYW5Db21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29t
cGlsZVByb2dyYW0pOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNh
bGwpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6
CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAg
KiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRy
YW5zaXRpb24pOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAg
ICAgKiB0b29scy9Db2RlUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkNvZGVQcm9maWxlOjpz
YW1wbGUpOgorCiAyMDEyLTA1LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgREZHIHNob3VsZCBiZSBhYmxlIHRvIGlubGluZSBmdW5jdGlvbnMgdGhhdCB1c2Ug
YXJndW1lbnRzIHJlZmxlY3RpdmVseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsMTEg
KzM4NywxMyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoRXhlY1N0YXRlKiBlCiAgICAg
ICAgICAgICBkYXRhTG9nKCIgbGxpbnQobm90IHNldCkiKTsKICNlbmRpZgogI2lmIEVOQUJMRShK
SVQpCi0gICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGdldENhbGxMaW5rSW5mbyhsb2NhdGlv
bikubGFzdFNlZW5DYWxsZWUuZ2V0KCk7Ci0gICAgICAgIGlmICh0YXJnZXQpCi0gICAgICAgICAg
ICBkYXRhTG9nKCIgaml0KCVwLCBleGVjICVwKSIsIHRhcmdldCwgdGFyZ2V0LT5leGVjdXRhYmxl
KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCIgaml0KG5vdCBzZXQpIik7
CisgICAgICAgIGlmIChudW1iZXJPZkNhbGxMaW5rSW5mb3MoKSkgeworICAgICAgICAgICAgSlNG
dW5jdGlvbiogdGFyZ2V0ID0gZ2V0Q2FsbExpbmtJbmZvKGxvY2F0aW9uKS5sYXN0U2VlbkNhbGxl
ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiIGppdCglcCwgZXhlYyAlcCkiLCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaml0KG5vdCBzZXQpIik7
CisgICAgICAgIH0KICNlbmRpZgogICAgIH0KICAgICBkYXRhTG9nKCJcbiIpOwpAQCAtMTU4MCw3
ICsxNTgyLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAg
ICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoMCkKICNpZiBFTkFCTEUoSklUKQotICAgICwgbV9jYW5Db21waWxlV2l0aERG
R1N0YXRlKENvbXBpbGVXaXRoREZHVW5zZXQpCisgICAgLCBtX2NhbkNvbXBpbGVXaXRoREZHU3Rh
dGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKIHsKICAgICBzZXROdW1QYXJh
bWV0ZXJzKG90aGVyLm51bVBhcmFtZXRlcnMoKSk7CkBAIC0yNDQ3LDE3ICsyNDQ5LDE3IEBAIEpT
T2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGkKICAgICByZXR1cm4gZXJyb3I7
CiB9CiAKLWJvb2wgUHJvZ3JhbUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgp
CitERkc6OkNhcGFiaWxpdHlMZXZlbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERG
R0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlUHJvZ3JhbSh0aGlzKTsK
IH0KIAotYm9vbCBFdmFsQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKK0RG
Rzo6Q2FwYWJpbGl0eUxldmVsIEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJu
YWwoKQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVFdmFsKHRoaXMpOwogfQogCi1ib29s
IEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKK0RGRzo6Q2Fw
YWJpbGl0eUxldmVsIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFs
KCkKIHsKICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gREZHOjpjYW5D
b21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
NiwyMCArMzk2LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIHZpcnR1
YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKIAotICAgICAgICBlbnVtIENvbXBpbGVX
aXRoREZHU3RhdGUgewotICAgICAgICAgICAgQ29tcGlsZVdpdGhERkdGYWxzZSwKLSAgICAgICAg
ICAgIENvbXBpbGVXaXRoREZHVHJ1ZSwKLSAgICAgICAgICAgIENvbXBpbGVXaXRoREZHVW5zZXQK
LSAgICAgICAgfTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRl
cm5hbCgpID0gMDsKLSAgICAgICAgYm9vbCBjYW5Db21waWxlV2l0aERGRygpCisgICAgICAgIHZp
cnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpID0g
MDsKKyAgICAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkcoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBib29sIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50ZXJu
YWwoKTsKLSAgICAgICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdCA/IENv
bXBpbGVXaXRoREZHVHJ1ZSA6IENvbXBpbGVXaXRoREZHRmFsc2U7CisgICAgICAgICAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCByZXN1bHQgPSBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7Cisg
ICAgICAgICAgICBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGUgPSByZXN1bHQ7CiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUg
Y2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0
ZTsgfQorICAgICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGR1N0YXRl
KCkgeyByZXR1cm4gbV9jYW5Db21waWxlV2l0aERGR1N0YXRlOyB9CiAKICAgICAgICAgYm9vbCBo
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiAgICAgICAgIHsKQEAgLTEzMTQsNyArMTMwOCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJl
RGF0YTsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBDb21waWxlV2l0aERGR1N0YXRlIG1fY2Fu
Q29tcGlsZVdpdGhERkdTdGF0ZTsKKyAgICAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbV9jYW5D
b21waWxlV2l0aERGR1N0YXRlOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTM1Niw3ICsxMzUwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAgICAgIHZp
cnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogICAgIH07CiAKQEAg
LTEzOTEsNyArMTM4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0
ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKLSAgICAgICAg
dmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAgICAgICAgdmlydHVh
bCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6CkBAIC0xNDI5LDcgKzE0MjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBq
aXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CisgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVdp
dGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExNjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzQwLDggKzIzNDAsNTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaGFuZGxlQ2FsbChpbnRlcnByZXRlciwgY3Vy
cmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3At
Pm1faW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVu
dHNSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGNvb2wgdG8gZnVubmVs
IHRoaXMgaW50byBoYW5kbGVDYWxsKCkgc28gdGhhdCBpdCBjYW4gaGFuZGxlCisgICAgICAgICAg
ICAvLyBpbmxpbmluZy4gQnV0IGN1cnJlbnRseSB0aGF0IHdvbid0IGJlIHByb2ZpdGFibGUgYW55
d2F5LCBzaW5jZSBub25lIG9mIHRoZQorICAgICAgICAgICAgLy8gdXNlcyBvZiBjYWxsX3ZhcmFy
Z3Mgd2lsbCBiZSBpbmxpbmVhYmxlLiBTbyB3ZSBzZXQgdGhpcyB1cCBtYW51YWxseSBhbmQKKyAg
ICAgICAgICAgIC8vIHdpdGhvdXQgaW5saW5lL2ludHJpbnNpYyBkZXRlY3Rpb24uCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJ
bnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gUHJlZGljdE5vbmU7Cisg
ICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51
Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50UHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bF92YXJhcmdzKTsKKyAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBhcmdD
b3VudCA9IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpOworICAgICAgICAgICAgaWYgKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IGFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKKyAgICAgICAgICAgICAgICBtX3BhcmFtZXRl
clNsb3RzID0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291bnQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSk7IC8vIGNhbGxlZQorICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsgLy8gdGhpcworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsr
YXJndW1lbnQpCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9P
cGVyYW5kKGFyZ3VtZW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXgg
Y2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9wSW5mbyhw
cmVkaWN0aW9uKSk7CisgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1
dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9jYWxsX3B1dF9yZXN1bHQpOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgICAgICAgICAvLyBTdGF0aWNhbGx5IHNwZWN1bGF0
ZSBmb3Igbm93LiBJdCBtYWtlcyBzZW5zZSB0byBsZXQgc3BlY3VsYXRlLW9ubHkgam5lcV9wdHIK
KyAgICAgICAgICAgIC8vIHN1cHBvcnQgc2ltbWVyIGZvciBhIHdoaWxlIGJlZm9yZSBtYWtpbmcg
aXQgbW9yZSBnZW5lcmFsLCBzaW5jZSBpdCdzCisgICAgICAgICAgICAvLyBhbHJlYWR5IGduYXJs
eSBlbm91Z2ggYXMgaXQgaXMuCisgICAgICAgICAgICBhZGRUb0dyYXBoKAorICAgICAgICAgICAg
ICAgIENoZWNrRnVuY3Rpb24sIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGwu
Z2V0KCkpLAorICAgICAgICAgICAgICAgIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRl
eCArIE9QQ09ERV9MRU5HVEgob3Bfam5lcV9wdHIpKSk7CisgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9qbmVxX3B0cik7CiAKICAgICAgICAgY2FzZSBvcF9yZXNvbHZlOiB7CiAgICAgICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CkBAIC0yNDYzLDgg
KzI1MDUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGNhbkNvbXBpbGVPcGNvZGUob3Bj
b2RlSUQpKTsKICAgICB9CiB9CiAKQEAgLTI0NzcsNiArMjUxNyw5IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgIFBoaVN0YWNrRW50cnkgZW50cnkgPSBw
aGlTdGFjay5sYXN0KCk7CiAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAg
CisgICAgICAgIGlmICghZW50cnkubV9ibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCiAgICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3Jz
ID0gZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7CiAgICAgICAgIHVuc2lnbmVkIHZhck5v
ID0gZW50cnkubV92YXJObzsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhp
ID0gbV9ncmFwaFtlbnRyeS5tX3BoaV0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0yOTA5LDEy
ICsyOTUyLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogCiAgICAgbGlua0Jsb2Nr
cyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9i
bG9ja0xpbmtpbmdUYXJnZXRzKTsKICAgICBtX2dyYXBoLmRldGVybWluZVJlYWNoYWJpbGl0eSgp
OwotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBBU1NF
UlQoYmxvY2spOwotICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAg
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKLSAgICB9CiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgIGRhdGFMb2coIlByb2Nlc3Npbmcg
bG9jYWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCkBAIC0yOTI2LDYgKzI5NjMsMTMgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIGRhdGFMb2coIlByb2Nlc3NpbmcgYXJn
dW1lbnQgcGhpcy5cbiIpOwogI2VuZGlmCiAgICAgcHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhp
U3RhY2s+KCk7CisKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisg
ICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAgfQog
ICAgIAogICAgIGZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDcg
KzI2MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC5sb2NhbCgpKTsKICAgICAgICAg
QVNTRVJUKG9yaWdpbmFsTm9kZUluZGV4ICE9IE5vTm9kZSk7CiAgICAgICAgIE5vZGUqIG9yaWdp
bmFsTm9kZSA9ICZtX2dyYXBoW29yaWdpbmFsTm9kZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKG9y
aWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIGlmIChjaGFuZ2VSZWYpCisg
ICAgICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAg
ICAgLy8gUG9zc2liaWxpdGllczoKICAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJs
b2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5
CiAgICAgICAgIC8vICAgICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93
biBOb2RlSW5kZXguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw2ICs0NDEsMzEgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCisgICAgTm9kZUluZGV4IGdldExv
Y2FsTG9hZEVsaW1pbmF0aW9uKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0
YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vz
c0RhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgfQorICAgIAogICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9v
bCBhZGRSZWYgPSB0cnVlKQogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5k
IGlzIGFjdHVhbGx5IHVudXNlZC4KQEAgLTQ2MiwxNSArNDg3LDE1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRS
ZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQpCisgICAgYm9vbCBzZXRSZXBsYWNlbWVu
dChOb2RlSW5kZXggcmVwbGFjZW1lbnQpCiAgICAgewogICAgICAgICBpZiAocmVwbGFjZW1lbnQg
PT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKICAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVw
bGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAogICAgICAgICAvLyBhZ3JlZS4KICAg
ICAgICAgaWYgKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSAhPSBtX2dyYXBo
W3JlcGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiICAgUmVwbGFjaW5nIEAldSAtPiBAJXUi
LCBtX2NvbXBpbGVJbmRleCwgcmVwbGFjZW1lbnQpOwpAQCAtNDgyLDYgKzUwNyw4IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgZWxpbWluYXRl
IGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KICAgICAgICAgbV9yZXBsYWNlbWVudHNbbV9j
b21waWxlSW5kZXhdID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbGltaW5hdGUoKQpAQCAtNTY5LDYgKzU5NiwyMiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2RlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldExvY2FsOiB7
CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Tm9kZUluZGV4IHBvc3NpYmxlUmVwbGFjZW1lbnQgPSBnZXRMb2NhbExvYWRFbGltaW5hdGlvbih2
YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgaWYgKCFzZXRSZXBsYWNlbWVudChwb3Nz
aWJsZVJlcGxhY2VtZW50KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIE5v
ZGVJbmRleCBvbGRUYWlsSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQoCisgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKKyAg
ICAgICAgICAgIGlmIChvbGRUYWlsSW5kZXggPT0gbV9jb21waWxlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpKSA9CisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUmVwbGFj
ZW1lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgICAgIC8vIFRoaXMg
aXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFzZXMgd2lsbCBjb252ZXJ0IG5vZGVz
IHRvIGNvbnN0YW50cywKICAgICAgICAgICAgIC8vIHdoaWNoIG1heSByZXN1bHQgaW4gZHVwbGlj
YXRlZCBjb25zdGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4gdGhpcyB1cC4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDEx
Njg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotc3RhdGljIGlubGluZSB2b2lkIGRlYnVn
RmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQpCitzdGF0aWMgaW5s
aW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsb2NrLCBPcGNvZGVJRCBvcGNvZGVJ
RCwgYm9vbCByZXN1bHQpCiB7CisgICAgQVNTRVJUKCFyZXN1bHQpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJDYW5ub3QgaGFuZGxlIGNvZGUgYmxvY2sgJXAg
YmVjYXVzZSBvZiBvcGNvZGUgJXMuXG4iLCBjb2RlQmxvY2ssIG9wY29kZU5hbWVzW29wY29kZUlE
XSk7CiAjZWxzZQpAQCAtNDQsMjMgKzQ1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z0Zh
aWwoQ29kZUJsb2NrKiAKICNlbmRpZgogfQogCi10ZW1wbGF0ZTxib29sICgqY2FuSGFuZGxlT3Bj
b2RlKShPcGNvZGVJRCk+Ci1ib29sIGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsb2NrLCBP
cGNvZGVJRCBvcGNvZGVJRCwgQ2FwYWJpbGl0eUxldmVsIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQo
cmVzdWx0ICE9IENhbkNvbXBpbGUpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAg
ICBpZiAocmVzdWx0ID09IENhbm5vdENvbXBpbGUpCisgICAgICAgIGRhdGFMb2coIkNhbm5vdCBo
YW5kbGUgY29kZSBibG9jayAlcCBiZWNhdXNlIG9mIG9wY29kZSAlcy5cbiIsIGNvZGVCbG9jaywg
b3Bjb2RlTmFtZXNbb3Bjb2RlSURdKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBTaG91bGRQcm9maWxlKTsKKyAgICAgICAgZGF0YUxvZygiQ2Fubm90IGNvbXBpbGUgY29k
ZSBibG9jayAlcCBiZWNhdXNlIG9mIG9wY29kZSAlcywgYnV0IGlubGluaW5nIG1pZ2h0IGJlIHBv
c3NpYmxlLlxuIiwgY29kZUJsb2NrLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0pOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CisgICAgVU5VU0VEX1BBUkFNKG9wY29k
ZUlEKTsKKyNlbmRpZgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCBSZXR1cm5U
eXBlICgqY2FuSGFuZGxlT3Bjb2RlKShPcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24q
KT4KK1JldHVyblR5cGUgY2FuSGFuZGxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0
dXJuVHlwZSBpbml0aWFsVmFsdWUpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0g
Y29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5z
aXplKCk7CisgICAgUmV0dXJuVHlwZSByZXN1bHQgPSBpbml0aWFsVmFsdWU7CiAgICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IDA7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1
Y3Rpb25Db3VudDsgKSB7CiAgICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KGluc3RydWN0aW9uc0JlZ2luW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIHsKLSNkZWZpbmUg
REVGSU5FX09QKG9wY29kZSwgbGVuZ3RoKSAgICAgICAgICAgICAgIFwKLSAgICAgICAgY2FzZSBv
cGNvZGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghY2Fu
SGFuZGxlT3Bjb2RlKG9wY29kZSkpIHsgICAgIFwKLSAgICAgICAgICAgICAgICBkZWJ1Z0ZhaWwo
Y29kZUJsb2NrLCBvcGNvZGUpOyAgIFwKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGJyZWFrOworI2RlZmluZSBERUZJTkVfT1Aob3Bjb2RlLCBsZW5n
dGgpIFwKKyAgICAgICAgY2FzZSBvcGNvZGU6IHsgXAorICAgICAgICAgICAgUmV0dXJuVHlwZSBj
dXJyZW50ID0gY2FuSGFuZGxlT3Bjb2RlKCBcCisgICAgICAgICAgICAgICAgb3Bjb2RlLCBjb2Rl
QmxvY2ssIGluc3RydWN0aW9uc0JlZ2luICsgYnl0ZWNvZGVPZmZzZXQpOyBcCisgICAgICAgICAg
ICBpZiAoY3VycmVudCA8IHJlc3VsdCkgeyBcCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3Vy
cmVudDsgXAorICAgICAgICAgICAgICAgIGRlYnVnRmFpbChjb2RlQmxvY2ssIG9wY29kZSwgY3Vy
cmVudCk7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0g
bGVuZ3RoOyBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9CiAgICAgICAgICAgICBG
T1JfRUFDSF9PUENPREVfSUQoREVGSU5FX09QKQogI3VuZGVmIERFRklORV9PUAogICAgICAgICBk
ZWZhdWx0OgpAQCAtNjksMTkgKzkwLDE5IEBAIGJvb2wgY2FuSGFuZGxlT3Bjb2RlcyhDb2RlQmxv
Y2sqIGNvZGVCbG8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayog
Y29kZUJsb2NrKQorQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNhbkhhbmRsZU9wY29k
ZXM8Y2FuQ29tcGlsZU9wY29kZT4oY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Q2FwYWJpbGl0eUxldmVsLCBjYW5D
b21waWxlT3Bjb2RlPihjb2RlQmxvY2ssIENhbkNvbXBpbGUpOwogfQogCiBib29sIGNhbklubGlu
ZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNhbkhhbmRsZU9w
Y29kZXM8Y2FuSW5saW5lT3Bjb2RlPihjb2RlQmxvY2spOworICAgIHJldHVybiBjYW5IYW5kbGVP
cGNvZGVzPGJvb2wsIGNhbklubGluZU9wY29kZT4oY29kZUJsb2NrLCB0cnVlKTsKIH0KIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJ
KHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgREZHQ2Fw
YWJpbGl0aWVzX2gKIAogI2luY2x1ZGUgIkludHJpbnNpYy5oIgorI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgpAQCAtNjcsNyArNjgsNyBAQCBpbmxpbmUgYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ29uc3RyCiB9CiAKIC8vIE9wY29kZSBjaGVja2luZy4KLWlubGluZSBib29s
IGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCitpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3Ry
dWN0aW9uKikKIHsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF9lbnRlcjoK
QEAgLTE3MCwxNCArMTcxLDE4IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2Rl
SUQgb3AKICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICBjYXNlIG9wX2dldF9hcmd1bWVu
dF9ieV92YWw6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICAgICAgcmV0dXJuIENhbkNvbXBp
bGU7CiAgICAgICAgIAorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAgICByZXR1cm4g
U2hvdWxkUHJvZmlsZTsKKwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBjYW5J
bmxpbmVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNv
ZGUoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiog
cGMpCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICAKQEAgLTE5NSw3ICsyMDAs
NiBAQCBpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQgb3BjCiAgICAgICAgIAog
ICAgIC8vIElubGluaW5nIGRvZXNuJ3QgY29ycmVjdGx5IHJlbWFwIHJlZ3VsYXIgZXhwcmVzc2lv
biBvcGVyYW5kcy4KICAgICBjYXNlIG9wX25ld19yZWdleHA6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbmxpbmluZyBjb2RlIHRoYXQg
Y3JlYXRlcyBhY3RpdmF0aW9ucyBvciBoYXMgbmVzdGVkIGZ1bmN0aW9ucy4KICAgICBjYXNlIG9w
X2NyZWF0ZV9hY3RpdmF0aW9uOgpAQCAtMjA0LDEyICsyMDgsMTcgQEAgaW5saW5lIGJvb2wgY2Fu
SW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wYwogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAorICAgIC8vIElubGluaW5nIHN1cHBvcnRzIG9w
X2NhbGxfdmFyYXJncyBpZiBpdCdzIGEgY2FsbCB0aGF0IGp1c3QgZm9yd2FyZHMgdGhlIGNhbGxl
cidzCisgICAgLy8gYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgICAg
ICByZXR1cm4gcGNbM10udS5vcGVyYW5kID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIo
KTsKKyAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGNhbkNvbXBpbGVPcGNv
ZGUob3Bjb2RlSUQpOworICAgICAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJRCwg
Y29kZUJsb2NrLCBwYykgPT0gQ2FuQ29tcGlsZTsKICAgICB9CiB9CiAKLWJvb2wgY2FuQ29tcGls
ZU9wY29kZXMoQ29kZUJsb2NrKik7CitDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZXMo
Q29kZUJsb2NrKik7CiBib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKik7CiAjZWxzZSAv
LyBFTkFCTEUoREZHX0pJVCkKIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2Nr
KikgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTIxOSwzMCArMjI4LDQyIEBAIGlubGluZSBib29sIG1p
Z2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3QKIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3JDYWxsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdo
dElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLWlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQpIHsgcmV0dXJuIGZhbHNl
OyB9Ci1pbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQpIHsgcmV0dXJuIGZhbHNl
OyB9Ci1pbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqKSB7IHJldHVybiBm
YWxzZTsgfQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlE
LCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9v
bCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aW9uKikgeyBy
ZXR1cm4gZmFsc2U7IH0KK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZXMo
Q29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIGNhbklubGluZU9wY29k
ZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCitp
bmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIHJldHVybiBtaWdodENvbXBpbGVFdmFsKGNvZGVCbG9jaykgJiYgY2FuQ29tcGls
ZU9wY29kZXMoY29kZUJsb2NrKTsKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZUV2YWwoY29kZUJsb2Nr
KSkKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CisgICAgCisgICAgcmV0dXJuIGNhbkNv
bXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CiB9CiAKLWlubGluZSBib29sIGNhbkNvbXBpbGVQcm9n
cmFtKENvZGVCbG9jayogY29kZUJsb2NrKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gbWlnaHRDb21w
aWxlUHJvZ3JhbShjb2RlQmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7Cisg
ICAgaWYgKCFtaWdodENvbXBpbGVQcm9ncmFtKGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxv
Y2spOwogfQogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9j
ayogY29kZUJsb2NrKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlRnVuY3Rpb25G
b3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBtaWdodENvbXBpbGVG
dW5jdGlvbkZvckNhbGwoY29kZUJsb2NrKSAmJiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2sp
OworICAgIGlmICghbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykpCisgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYW5Db21waWxlT3Bj
b2Rlcyhjb2RlQmxvY2spOwogfQogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlRnVuY3Rpb25Gb3JD
b25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCitpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAg
ICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBj
YW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOworICAgIGlmICghbWlnaHRDb21waWxlRnVuY3Rp
b25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7
CisgICAgCisgICAgcmV0dXJuIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CiB9CiAKIGlu
bGluZSBib29sIGNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTE2ODU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDYgKzEyMSw4IEBAIGVudW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsgTmVlZFRvU3Bp
bGwsIEQKIAogZW51bSBOb1Jlc3VsdFRhZyB7IE5vUmVzdWx0IH07CiAKK2VudW0gQ2FwYWJpbGl0
eUxldmVsIHsgQ2Fubm90Q29tcGlsZSwgU2hvdWxkUHJvZmlsZSwgQ2FuQ29tcGlsZSwgQ2FwYWJp
bGl0eUxldmVsTm90U2V0IH07CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGlubGluZSBib29s
IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwot
CisgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2coIkRGRyBj
b21waWxpbmcgY29kZSBibG9jayAlcCglcCkgZm9yIGV4ZWN1dGFibGUgJXAsIG51bWJlciBvZiBp
bnN0cnVjdGlvbnMgPSAldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgICAgIGRhdGFMb2coIiVzQCV1JXMiLAogICAg
ICAgICAgICAgICAgICAgICB1c2VLaW5kVG9TdHJpbmcobV92YXJBcmdDaGlsZHJlbltjaGlsZElk
eF0udXNlS2luZCgpKSwKICAgICAgICAgICAgICAgICAgICAgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0uaW5kZXgoKSwKLSAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvblRvQWJicmV2aWF0
ZWRTdHJpbmcoYXQoY2hpbGRJZHgpLnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgICAgICAg
ICBwcmVkaWN0aW9uVG9BYmJyZXZpYXRlZFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF0KG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKS5wcmVkaWN0aW9uKCkpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghIW5vZGUuY2hpbGQxKCkpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ1LDcgKzk0NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUmIG5vZGUpCiB7CiAgICAgUF9ERkdPcGVyYXRpb25fRSBzbG93Q2FsbEZ1bmN0
aW9uOwotCisgICAgCiAgICAgaWYgKG5vZGUub3AoKSA9PSBDYWxsKQogICAgICAgICBzbG93Q2Fs
bEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NhbGw7CiAgICAgZWxzZSB7CkBAIC05NjQsOCArOTY0
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CiAgICAgdXNlKGNhbGxlZUVkZ2UpOwogICAgIAot
ICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBm
dW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQotICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2Fs
bCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgLy8gVGhlIGNh
bGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1
ZW50IGNoaWxkcmVuIGFyZSB0aGUKKyAgICAvLyBhcmd1bWVudHMuCiAgICAgaW50IG51bVBhc3Nl
ZEFyZ3MgPSBub2RlLm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAogICAgIG1faml0LnN0b3JlMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQpLCBjYWxsRnJhbWVQYXlsb2FkU2xvdChSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NyArOTYsNyBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiAjaWYg
RU5BQkxFKERGR19KSVQpCiB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXph
dGlvbkNoZWNrS2luZCBraW5kKQogewotICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQor
ICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEp1
bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9
PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVt
ZW50Rm9yTG9vcCA6IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4p
LCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVy
KCkpKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFJhcmVD
YXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gMDsKLSAgICAgICAgaWYgKG1fY2FuQmVPcHRp
bWl6ZWQpCisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICBy
YXJlQ2FzZVByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YWRkUmFyZUNhc2VQcm9maWxlKG1fYnl0ZWNv
ZGVPZmZzZXQpOwogI2VuZGlmCiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8g
PT0gKGl0ZXIgLSAxKS0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNv
ZGVnZW4uIik7CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAgICAg
aWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkp
CiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFy
ZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKICNlbmRpZgogCkBAIC01NjYsNyArNTY2LDI0IEBA
IEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICNlbmRpZgogICAgIAog
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2Rl
QmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBzd2l0Y2ggKGxldmVs
KSB7CisgICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CisgICAgICAgIG1fY2FuQmVPcHRpbWl6
ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgREZHOjpTaG91bGRQcm9maWxlOgorICAgICAgICBtX2NhbkJl
T3B0aW1pemVkID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgorICAgICAgICBtX2Nh
bkJlT3B0aW1pemVkID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICNlbmRpZgogCiAgICAgLy8gSnVzdCBhZGQg
YSBsaXR0bGUgYml0IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTYyMCw3ICs2Mzcs
NyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgTGFiZWwg
ZnVuY3Rpb25Cb2R5ID0gbGFiZWwoKTsKICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
Ci0gICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCiAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9j
ay0+bV9leGVjdXRpb25FbnRyeUNvdW50KSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNyArODM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsg
cmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmls
aW5nKCkgeyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQorICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAg
ICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAv
LyBFbmFibGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0
dXJuZWQgb2ZmLApAQCAtODg2LDYgKzg4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5B
QkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CisgICAg
ICAgIGJvb2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1Nf
QUxJR05NRU5UOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw3ICs4MTgsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgCiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
LSAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBiZSBhYmxlIHRvIG1lYXN1
cmUgaWYgdGhpcyBpcyB0YWtpbmcgdGhlIHNsb3cgY2FzZSBqdXN0CiAgICAgICAgICAgICAvLyBi
ZWNhdXNlIG9mIG5lZ2F0aXZlIHplcm8uIElmIHRoaXMgcHJvZHVjZXMgcG9zaXRpdmUgemVybywg
dGhlbiB3ZQogICAgICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGUgc2xvdyBjYXNlIHRvIGJlIHRh
a2VuIGJlY2F1c2UgdGhhdCB3aWxsIHRocm93IG9mZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAx
MTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIC8vIElmIHdlIHN1Y2NlZWQgaW4gYWxsIG9m
IG91ciBjaGVja3MsIGFuZCB0aGUgY29kZSB3YXMgb3B0aW1pemFibGUsIHRoZW4gbWFrZSBzdXJl
IHdlCiAgICAgLy8gZGVjcmVtZW50IHRoZSByYXJlIGNhc2UgY291bnRlci4KICNpZiBFTkFCTEUo
VkFMVUVfUFJPRklMRVIpCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygp
KSB7CisgICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpID49IERGRzo6U2hv
dWxkUHJvZmlsZSkgewogICAgICAgICBzdWIzMigKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMigx
KSwKICAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPnJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+bV9jb3VudGVy
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgLy8gSWYgd2Ugc3Vj
Y2VlZCBpbiBhbGwgb2Ygb3VyIGNoZWNrcywgYW5kIHRoZSBjb2RlIHdhcyBvcHRpbWl6YWJsZSwg
dGhlbiBtYWtlIHN1cmUgd2UKICAgICAvLyBkZWNyZW1lbnQgdGhlIHJhcmUgY2FzZSBjb3VudGVy
LgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNv
bXBpbGVXaXRoREZHKCkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZH
KCkgPj0gREZHOjpTaG91bGRQcm9maWxlKSB7CiAgICAgICAgIHN1YjMyKAogICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKDEpLAogICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9j
ay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoc3R1YkluZm8tPmJ5dGVjb2RlSW5k
ZXgpLT5tX2NvdW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2Rl
UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgQ29kZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoKICAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOwog
ICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJ
VCkKICAgICAgICAgICAgICAgICB0eXBlID0gREZHSklUOwotICAgICAgICAgICAgZWxzZSBpZiAo
Y29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGR1N0YXRlKCkgPT0gQ29kZUJsb2NrOjpDb21waWxl
V2l0aERGR0ZhbHNlKQorICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5jYW5Db21waWxl
V2l0aERGR1N0YXRlKCkgIT0gREZHOjpDYW5Db21waWxlKQogICAgICAgICAgICAgICAgIHR5cGUg
PSBCYXNlbGluZU9ubHk7CiAgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCkpCiAgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141597</attachid>
            <date>2012-05-12 21:41:16 -0700</date>
            <delta_ts>2012-05-13 12:03:48 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>foo_apply_bar_arguments_patch_2.diff</filename>
            <type>text/plain</type>
            <size>43197</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEyLTA1LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIGZvby5hcHBseShiYXIsIGFyZ3VtZW50cykK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MzA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
bmFibGVzIGNvbXBpbGF0aW9uIG9mIG9wX2puZXFfcHRyIGFuZCBzb21lIGZvcm1zIG9mIG9wX2Nh
bGxfdmFyYXJncy4KKyAgICAgICAgCisgICAgICAgIEFsc28gaW5jbHVkZXMgYSBidW5jaCBvZiBi
dWcgZml4ZXMgdGhhdCB3ZXJlIG1hZGUgbmVjZXNzYXJ5IGJ5IHRoZSBpbmNyZWFzZWQKKyAgICAg
ICAgcHJlc3N1cmUgb24gdGhlIENGRyBzaW1wbGlmaWVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBhIDEtMiUgd2luIG9uIFY4LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVC
bG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR1N0YXRlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoRXZh
bENvZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhUYWlsT3BlcmFuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OmdldExvY2FsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKENTRVBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGVidWdGYWlsKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGUpOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlT3Bjb2Rlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6OmNh
bkNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlRnVuY3Rpb25G
b3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHRHJpdmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAo
VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OmNoZWNrT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhP
cCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6c2FtcGxlKToKKwogMjAxMi0wNS0xMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgYmUgYWJsZSB0
byBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgdXNlIGFyZ3VtZW50cyByZWZsZWN0aXZlbHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50Q2FsbE9wKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgZGF0YUxvZygiIGxsaW50KG5vdCBz
ZXQpIik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBKU0Z1bmN0aW9uKiB0YXJn
ZXQgPSBnZXRDYWxsTGlua0luZm8obG9jYXRpb24pLmxhc3RTZWVuQ2FsbGVlLmdldCgpOwotICAg
ICAgICBpZiAodGFyZ2V0KQotICAgICAgICAgICAgZGF0YUxvZygiIGppdCglcCwgZXhlYyAlcCki
LCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZGF0YUxvZygiIGppdChub3Qgc2V0KSIpOworICAgICAgICBpZiAobnVtYmVyT2ZDYWxsTGlu
a0luZm9zKCkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGdldENhbGxMaW5r
SW5mbyhsb2NhdGlvbikubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAodGFy
Z2V0KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBqaXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0
LCB0YXJnZXQtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiIGppdChub3Qgc2V0KSIpOworICAgICAgICB9CiAjZW5kaWYKICAgICB9CiAg
ICAgZGF0YUxvZygiXG4iKTsKQEAgLTE1ODAsNyArMTU4Miw3IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQor
ICAgICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQogI2VuZGlmCiB7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkp
OwpAQCAtMjQ0NywxNyArMjQ0OSwxNyBAQCBKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNv
bXBpbGVPcHRpCiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1ib29sIFByb2dyYW1Db2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQorREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3Jh
bUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERG
Rzo6Y2FuQ29tcGlsZVByb2dyYW0odGhpcyk7CiB9CiAKLWJvb2wgRXZhbENvZGVCbG9jazo6Y2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBFdmFsQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5D
b21waWxlRXZhbCh0aGlzKTsKIH0KIAotYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FuQ29tcGls
ZVdpdGhERkdJbnRlcm5hbCgpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9j
azo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1faXNDb25zdHJ1Y3Rv
cikKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KHRo
aXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMjAgKzM5NiwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9
IDA7CiAKLSAgICAgICAgZW51bSBDb21waWxlV2l0aERGR1N0YXRlIHsKLSAgICAgICAgICAgIENv
bXBpbGVXaXRoREZHRmFsc2UsCi0gICAgICAgICAgICBDb21waWxlV2l0aERGR1RydWUsCi0gICAg
ICAgICAgICBDb21waWxlV2l0aERGR1Vuc2V0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7Ci0gICAgICAgIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkcoKQorICAgICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7CisgICAgICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGVXaXRoREZHKCkKICAgICAgICAgewotICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7Ci0gICAgICAgICAgICBtX2NhbkNvbXBp
bGVXaXRoREZHU3RhdGUgPSByZXN1bHQgPyBDb21waWxlV2l0aERGR1RydWUgOiBDb21waWxlV2l0
aERGR0ZhbHNlOworICAgICAgICAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0aERG
R1N0YXRlID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQot
ICAgICAgICBDb21waWxlV2l0aERGR1N0YXRlIGNhbkNvbXBpbGVXaXRoREZHU3RhdGUoKSB7IHJl
dHVybiBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7IH0KKyAgICAgICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhE
RkdTdGF0ZTsgfQogCiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAg
ICAgICB7CkBAIC0xMzE0LDcgKzEzMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICBPd25QdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7CisgICAgICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICNlbmRpZgog
ICAgIH07CiAKQEAgLTEzNTYsNyArMTM1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJ
bXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAg
ICAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkBAIC0xMzkxLDcgKzEzODUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERG
R0ludGVybmFsKCk7CisgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpAQCAtMTQyOSw3
ICsxNDIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNv
bigpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAg
ICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogICAg
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0MCw4ICsyMzQwLDUw
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0LCBD
b2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0cnVjdCk7
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAv
LyBJdCB3b3VsZCBiZSBjb29sIHRvIGZ1bm5lbCB0aGlzIGludG8gaGFuZGxlQ2FsbCgpIHNvIHRo
YXQgaXQgY2FuIGhhbmRsZQorICAgICAgICAgICAgLy8gaW5saW5pbmcuIEJ1dCBjdXJyZW50bHkg
dGhhdCB3b24ndCBiZSBwcm9maXRhYmxlIGFueXdheSwgc2luY2Ugbm9uZSBvZiB0aGUKKyAgICAg
ICAgICAgIC8vIHVzZXMgb2YgY2FsbF92YXJhcmdzIHdpbGwgYmUgaW5saW5lYWJsZS4gU28gd2Ug
c2V0IHRoaXMgdXAgbWFudWFsbHkgYW5kCisgICAgICAgICAgICAvLyB3aXRob3V0IGlubGluZS9p
bnRyaW5zaWMgZGV0ZWN0aW9uLgorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnN0cnVjdGlv
biogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IFByZWRpY3ROb25lOworICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3Vs
dCkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAg
cHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIGlmIChSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMp
CisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOyAvLyBjYWxs
ZWUKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7IC8vIHRoaXMKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgaWYg
KGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9w
X2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfY2FsbF9wdXRfcmVzdWx0OgogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRf
cmVzdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgICAg
ICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8g
bGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCisgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1l
ciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwor
ICAgICAgICAgICAgLy8gYWxyZWFkeSBnbmFybHkgZW5vdWdoIGFzIGl0IGlzLgorICAgICAgICAg
ICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBDaGVja0Z1bmN0aW9uLCBPcEluZm8oY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsLmdldCgpKSwKKyAgICAgICAgICAgICAgICBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFw
aChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfcHRy
KSkpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogCiAgICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZTogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
Z2V0UHJlZGljdGlvbigpOwpAQCAtMjQ2Myw4ICsyNTA1LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEFTU0VSVChjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKSk7CiAgICAgfQogfQogCkBAIC0yNDc3
LDYgKzI1MTcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAg
ICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwogICAgICAgICBwaGlT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIAorICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAogICAgICAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNz
b3JzOwogICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwpAQCAtMjkwOSwxMiArMjk1Miw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKIAogICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgbV9n
cmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmNsZWFyKCk7Ci0gICAgfQogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGxvY2FsIHZhcmlhYmxlIHBoaXMuXG4iKTsKICNl
bmRpZgpAQCAtMjkyNiw2ICsyOTYzLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkK
ICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGFyZ3VtZW50IHBoaXMuXG4iKTsKICNlbmRpZgogICAg
IHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOworCisgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVChibG9jayk7CisgICAgICAg
IGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KICAgICAKICAgICBmaXhWYXJpYWJsZUFjY2Vzc1By
ZWRpY3Rpb25zKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nl
c3NvcihibG9jaywgMCksIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJD
aGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMjU2LDEy
ICsyNTcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwogICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkp
CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRh
TG9nKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LlxuIiwgZWRnZS5pbmRleCgpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOworI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgTm9kZUluZGV4IG9yaWdpbmFsTm9k
ZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2FsKCkpOwor
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxv
ZygiICAgICAgICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1LlxuIiwgb3JpZ2luYWxOb2RlSW5k
ZXgpOworI2VuZGlmCiAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUp
OwogICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRl
eF07Ci0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBpZiAoY2hhbmdlUmVmKQorICAgICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6CiAgICAgICAgIC8vIFNl
dExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhp
bmcgdGhhdCBpcyBpbW1lZGlhdGVseQogICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBm
aXJzdCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgpAQCAtMjgxLDE1ICsyOTMsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIFNldExvY2FsOiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCdzIGEgU2V0TG9j
YWwuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChlZGdlLCBv
cmlnaW5hbE5vZGUtPmNoaWxkMSgpLmluZGV4KCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CisjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
ICBJdCdzIGEgR2V0TG9jYWwuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChlZGdlLCBvcmlnaW5hbE5vZGVJbmRleCwgY2hhbmdlUmVmKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCdzIFBoaS9TZXRBcmd1bWVudC5cbiIpOworI2Vu
ZGlmCiAgICAgICAgICAgICAvLyBLZWVwIHRoZSBHZXRMb2NhbCEKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC00NDIsMTMgKzQ2MywyNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBp
biB0aGUgZmlyc3QgYmxvY2ssIGFuZCBhZGp1c3QgdGhlIHN1YnN0aXR1dGlvbiB0byBhY2NvdW50
IGZvcgotICAgICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCBzdWNjZXNzb3JzIHdpbGwgcmVmZXIg
dG8gdGhlIGNoaWxkIG9mIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgIEFTU0VSVChmaXJzdEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOwotICAgICAg
ICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0KLSAgICAgICAgICAgICAgICBP
cGVyYW5kU3Vic3RpdHV0aW9uKAotICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxk
MSgpLmluZGV4KCksCi0gICAgICAgICAgICAgICAgICAgIHNraXBHZXRMb2NhbChmaXJzdEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAgICAgICAgICAgLy8gSXQn
cyBwb3NzaWJsZSB0aGF0IHRoZSBzZWNvbmQgYmxvY2sgaGFkIGEgR2V0TG9jYWwgYW5kIHRoZSBm
aXJzdCBibG9jaworICAgICAgICAgICAgLy8gaGFkIGEgU2V0QXJndW1lbnQgb3IgYSBQaGkuIFRo
ZW4gdXBkYXRlIHRoZSB0YWlsLiBPdGhlcndpc2Uga2VlcCB3aGF0IHdhcyBpbiB0aGUKKyAgICAg
ICAgICAgIC8vIGZpcnN0IGJsb2NrLgorICAgICAgICAgICAgTm9kZUluZGV4IGF0Rmlyc3RUYWls
ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICBBU1NFUlQoYXRGaXJzdFRhaWwgIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHN3aXRjaCAo
bV9ncmFwaFthdEZpcnN0VGFpbF0ub3AoKSkgeworICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKKyAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8v
IEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0
dXRpb24gdG8gYWNjb3VudCBmb3IKKyAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHN1
Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhlIEdldExvY2FsLgorICAgICAg
ICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVy
YW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChv
cGVyYW5kKSA9CisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24oCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBza2lwR2V0TG9jYWwoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ5Niw3
ICs1MzEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBz
ZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IFBoYW50
b20gJiYgISFub2RlLmNoaWxkMSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkg
eworICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7CisgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LmNoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAg
ICAgICAgICBOb2RlJiBwb3NzaWJsZUxvY2FsT3AgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwog
ICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AuaGFzTG9jYWwoKSkgewpAQCAtNTA2
LDYgKzU0NSwyOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwu
b3AoKSA9PSBTZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdl
RWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAgICAgICAgIGlm
IChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRoZSBm
bHVzaCBjb3VsZCB1c2UgYSBHZXRMb2NhbCwgU2V0TG9jYWwsIFNldEFyZ3VtZW50LCBvciBhIFBo
aS4KKyAgICAgICAgICAgICAgICAvLyBJZiBpdCB1c2VzIGEgR2V0TG9jYWwsIGl0J2xsIGJlIHRh
a2VuIGNhcmUgb2YgYmVsb3cuIElmIGl0IHVzZXMgYQorICAgICAgICAgICAgICAgIC8vIFNldExv
Y2FsIG9yIFNldEFyZ3VtZW50LCB0aGVuIGl0IG11c3QgYmUgdXNpbmcgYSBub2RlIGZyb20gdGhl
CisgICAgICAgICAgICAgICAgLy8gc2FtZSBibG9jay4gQnV0IGlmIGl0IHVzZXMgYSBQaGksIHRo
ZW4gd2Ugc2hvdWxkIHJlZGlyZWN0IGl0IHRvCisgICAgICAgICAgICAgICAgLy8gdXNlIHdoYXRl
dmVyIHRoZSBmaXJzdCBibG9jayBhZHZlcnRpc2VkIGFzIGEgdGFpbCBvcGVyYW5kLgorICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLm9wKCkgIT0gUGhpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBO
b2RlSW5kZXggYXRGaXJzdEluZGV4ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJh
bmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9k
ZS5jaGlsZHJlbi5jaGlsZDEoKSwgRWRnZShhdEZpcnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9u
IDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NDEsNiArNDQxLDMxIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5h
dGlvbihWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAg
ICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1
ZSkKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1
bnVzZWQuCkBAIC00NjIsMTUgKzQ4NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFw
aFtjaGlsZF0ucmVmKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0UmVwbGFjZW1lbnQoTm9k
ZUluZGV4IHJlcGxhY2VtZW50KQorICAgIGJvb2wgc2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJl
cGxhY2VtZW50KQogICAgIHsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0
aGUgcHJlZGljdGlvbnMgZG9uJ3QKICAgICAgICAgLy8gYWdyZWUuCiAgICAgICAgIGlmIChtX2dy
YXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBsYWNlbWVudF0u
cHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgIGRhdGFMb2coIiAgIFJlcGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5k
ZXgsIHJlcGxhY2VtZW50KTsKQEAgLTQ4Miw2ICs1MDcsOCBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNl
cyB0byB0aGlzIG5vZGUuCiAgICAgICAgIG1fcmVwbGFjZW1lbnRzW21fY29tcGlsZUluZGV4XSA9
IHJlcGxhY2VtZW50OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IAogICAgIHZvaWQgZWxpbWluYXRlKCkKQEAgLTU2OSw2ICs1OTYsMjIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIE5vZGVJbmRleCBwb3Nz
aWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NE
YXRhKTsKKyAgICAgICAgICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVu
dCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFp
bEluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAorICAgICAg
ICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBpZiAo
b2xkVGFpbEluZGV4ID09IG1fY29tcGlsZUluZGV4KSB7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSkgPQorICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZVJlcGxhY2VtZW50OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1
dCBuZWNlc3NhcnkuIFNvbWUgcGhhc2VzIHdpbGwgY29udmVydCBub2RlcyB0byBjb25zdGFudHMs
CiAgICAgICAgICAgICAvLyB3aGljaCBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRz
LiBXZSB1c2UgQ1NFIHRvIGNsZWFuIHRoaXMgdXAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDMzICszNCw1NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAotc3RhdGljIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGVi
dWdGYWlsKENvZGVCbG9jayogY29kZUJsb2NrLCBPcGNvZGVJRCBvcGNvZGVJRCwgYm9vbCByZXN1
bHQpCiB7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOwogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJDYW5ub3QgaGFuZGxlIGNvZGUgYmxvY2sg
JXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMuXG4iLCBjb2RlQmxvY2ssIG9wY29kZU5hbWVzW29wY29k
ZUlEXSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogICAgIFVOVVNFRF9Q
QVJBTShvcGNvZGVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CiAjZW5kaWYKIH0KIAot
dGVtcGxhdGU8Ym9vbCAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQpPgotYm9vbCBjYW5IYW5k
bGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVn
RmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIENhcGFiaWxpdHlM
ZXZlbCByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBDYW5Db21waWxlKTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgaWYgKHJlc3VsdCA9PSBDYW5ub3RDb21waWxl
KQorICAgICAgICBkYXRhTG9nKCJDYW5ub3QgaGFuZGxlIGNvZGUgYmxvY2sgJXAgYmVjYXVzZSBv
ZiBvcGNvZGUgJXMuXG4iLCBjb2RlQmxvY2ssIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU2hvdWxkUHJvZmlsZSk7CisgICAgICAg
IGRhdGFMb2coIkNhbm5vdCBjb21waWxlIGNvZGUgYmxvY2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUg
JXMsIGJ1dCBpbmxpbmluZyBtaWdodCBiZSBwb3NzaWJsZS5cbiIsIGNvZGVCbG9jaywgb3Bjb2Rl
TmFtZXNbb3Bjb2RlSURdKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxv
Y2spOworICAgIFVOVVNFRF9QQVJBTShvcGNvZGVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3Vs
dCk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgUmV0dXJuVHlw
ZSAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQsIENvZGVCbG9jayosIEluc3RydWN0aW9uKik+
CitSZXR1cm5UeXBlIGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVy
blR5cGUgaW5pdGlhbFZhbHVlKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNv
ZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOworICAgIFJldHVyblR5cGUgcmVzdWx0ID0gaW5pdGlhbFZhbHVlOwogICAgIAogICAgIGZv
ciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0
aW9uQ291bnQ7ICkgewogICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChp
bnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSB7Ci0jZGVmaW5lIERF
RklORV9PUChvcGNvZGUsIGxlbmd0aCkgICAgICAgICAgICAgICBcCi0gICAgICAgIGNhc2Ugb3Bj
b2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIWNhbkhh
bmRsZU9wY29kZShvcGNvZGUpKSB7ICAgICBcCi0gICAgICAgICAgICAgICAgZGVidWdGYWlsKGNv
ZGVCbG9jaywgb3Bjb2RlKTsgICBcCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBsZW5ndGg7ICAgICAgICAg
ICBcCi0gICAgICAgICAgICBicmVhazsKKyNkZWZpbmUgREVGSU5FX09QKG9wY29kZSwgbGVuZ3Ro
KSBcCisgICAgICAgIGNhc2Ugb3Bjb2RlOiB7IFwKKyAgICAgICAgICAgIFJldHVyblR5cGUgY3Vy
cmVudCA9IGNhbkhhbmRsZU9wY29kZSggXAorICAgICAgICAgICAgICAgIG9wY29kZSwgY29kZUJs
b2NrLCBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2RlT2Zmc2V0KTsgXAorICAgICAgICAgICAg
aWYgKGN1cnJlbnQgPCByZXN1bHQpIHsgXAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJl
bnQ7IFwKKyAgICAgICAgICAgICAgICBkZWJ1Z0ZhaWwoY29kZUJsb2NrLCBvcGNvZGUsIGN1cnJl
bnQpOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxl
bmd0aDsgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfQogICAgICAgICAgICAgRk9S
X0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKICN1bmRlZiBERUZJTkVfT1AKICAgICAgICAgZGVm
YXVsdDoKQEAgLTY5LDE5ICs5MiwxOSBAQCBib29sIGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2Nr
KiBjb2RlQmxvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVz
PGNhbkNvbXBpbGVPcGNvZGU+KGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21w
aWxlOworICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPENhcGFiaWxpdHlMZXZlbCwgY2FuQ29t
cGlsZU9wY29kZT4oY29kZUJsb2NrLCBDYW5Db21waWxlKTsKIH0KIAogYm9vbCBjYW5JbmxpbmVP
cGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjYW5IYW5kbGVPcGNv
ZGVzPGNhbklubGluZU9wY29kZT4oY29kZUJsb2NrKTsKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bj
b2Rlczxib29sLCBjYW5JbmxpbmVPcGNvZGU+KGNvZGVCbG9jaywgdHJ1ZSk7CiB9CiAKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShy
ZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIERGR0NhcGFi
aWxpdGllc19oCiAKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJERkdDb21tb24u
aCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKQEAgLTY3LDcgKzY4LDcgQEAgaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVG
dW5jdGlvbkZvckNvbnN0cgogfQogCiAvLyBPcGNvZGUgY2hlY2tpbmcuCi1pbmxpbmUgYm9vbCBj
YW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQoraW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVj
dGlvbiopCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3BfZW50ZXI6CkBA
IC0xNzAsMTQgKzE3MSwxOCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlE
IG9wCiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRf
YnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6Ci0gICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgICAgIHJldHVybiBDYW5Db21waWxl
OwogICAgICAgICAKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgcmV0dXJuIFNo
b3VsZFByb2ZpbGU7CisKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgY2FuSW5s
aW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2Rl
KE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBj
KQogewogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgCkBAIC0xOTUsNyArMjAwLDYg
QEAgaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wYwogICAgICAgICAKICAg
ICAvLyBJbmxpbmluZyBkb2Vzbid0IGNvcnJlY3RseSByZW1hcCByZWd1bGFyIGV4cHJlc3Npb24g
b3BlcmFuZHMuCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW5saW5pbmcgY29kZSB0aGF0IGNy
ZWF0ZXMgYWN0aXZhdGlvbnMgb3IgaGFzIG5lc3RlZCBmdW5jdGlvbnMuCiAgICAgY2FzZSBvcF9j
cmVhdGVfYWN0aXZhdGlvbjoKQEAgLTIwNCwxMiArMjA4LDE3IEBAIGlubGluZSBib29sIGNhbklu
bGluZU9wY29kZShPcGNvZGVJRCBvcGMKICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAvLyBJbmxpbmluZyBzdXBwb3J0cyBvcF9j
YWxsX3ZhcmFyZ3MgaWYgaXQncyBhIGNhbGwgdGhhdCBqdXN0IGZvcndhcmRzIHRoZSBjYWxsZXIn
cworICAgIC8vIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAg
cmV0dXJuIHBjWzNdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCk7
CisgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2Rl
KG9wY29kZUlEKTsKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBpbGVPcGNvZGUob3Bjb2RlSUQsIGNv
ZGVCbG9jaywgcGMpID09IENhbkNvbXBpbGU7CiAgICAgfQogfQogCi1ib29sIGNhbkNvbXBpbGVP
cGNvZGVzKENvZGVCbG9jayopOworQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGVzKENv
ZGVCbG9jayopOwogYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopOwogI2Vsc2UgLy8g
RU5BQkxFKERGR19KSVQpCiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayop
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yMTksMzAgKzIyOCw0MiBAQCBpbmxpbmUgYm9vbCBtaWdo
dENvbXBpbGVGdW5jdGlvbkZvckNvbnN0CiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9u
Rm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRJ
bmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQog
Ci1pbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsg
fQotaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsg
fQotaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFs
c2U7IH0KK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCwg
Q29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wg
Y2FuSW5saW5lT3Bjb2RlKE9wY29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiopIHsgcmV0
dXJuIGZhbHNlOyB9CitpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGVzKENv
ZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGVz
KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKLWlubGluZSBib29sIGNhbkNvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2NrKQoraW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKLSAgICByZXR1cm4gbWlnaHRDb21waWxlRXZhbChjb2RlQmxvY2spICYmIGNhbkNvbXBpbGVP
cGNvZGVzKGNvZGVCbG9jayk7CisgICAgaWYgKCFtaWdodENvbXBpbGVFdmFsKGNvZGVCbG9jaykp
CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYW5Db21w
aWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlUHJvZ3Jh
bShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZVByb2dyYW0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIG1pZ2h0Q29tcGls
ZVByb2dyYW0oY29kZUJsb2NrKSAmJiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOworICAg
IGlmICghbWlnaHRDb21waWxlUHJvZ3JhbShjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gQ2Fu
bm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2Nr
KTsKIH0KIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZUZ1bmN0aW9uRm9y
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gbWlnaHRDb21waWxlRnVu
Y3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsK
KyAgICBpZiAoIW1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2spKQorICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29k
ZXMoY29kZUJsb2NrKTsKIH0KIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAg
cmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykgJiYgY2Fu
Q29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwor
ICAgIAorICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCiBpbmxp
bmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDExNjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSw2ICsxMjEsOCBAQCBlbnVtIFNwaWxsUmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1NwaWxs
LCBECiAKIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9OwogCitlbnVtIENhcGFiaWxpdHlM
ZXZlbCB7IENhbm5vdENvbXBpbGUsIFNob3VsZFByb2ZpbGUsIENhbkNvbXBpbGUsIENhcGFiaWxp
dHlMZXZlbE5vdFNldCB9OworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBpbmxpbmUgYm9vbCBj
b21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLQor
ICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJERkcgY29t
cGlsaW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5z
dHJ1Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgICAgICBkYXRhTG9nKCIlc0AldSVzIiwKICAgICAg
ICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
LnVzZUtpbmQoKSksCiAgICAgICAgICAgICAgICAgICAgIG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLmluZGV4KCksCi0gICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb25Ub0FiYnJldmlhdGVk
U3RyaW5nKGF0KGNoaWxkSWR4KS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJlZGljdGlvblRvQWJicmV2aWF0ZWRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICBh
dChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkucHJlZGljdGlvbigpKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0NSw3ICs5NDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlJiBub2RlKQogewogICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlv
bjsKLQorICAgIAogICAgIGlmIChub2RlLm9wKCkgPT0gQ2FsbCkKICAgICAgICAgc2xvd0NhbGxG
dW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOwogICAgIGVsc2UgewpAQCAtOTY0LDggKzk2NCw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBHUFJSZWcg
Y2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogICAgIHVzZShjYWxsZWVFZGdlKTsKICAgICAKLSAg
ICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVu
Y3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKLSAgICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwp
LiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgorICAgIC8vIFRoZSBjYWxs
IGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVu
dCBjaGlsZHJlbiBhcmUgdGhlCisgICAgLy8gYXJndW1lbnRzLgogICAgIGludCBudW1QYXNzZWRB
cmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKICAgICBtX2ppdC5zdG9yZTMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3Vt
ZW50KSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNp
b24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgcHVibGljOgogICAgICAgICB9IFwKICAg
ICB9IHdoaWxlICgwKQogCisgICAgI2RlZmluZSBub3RTZXQgKHN0YXRpY19jYXN0PHNpemVfdD4o
LTEpKQorCiAgICAgdm9pZCB2YWxpZGF0ZSgpCiAgICAgewogICAgICAgICAvLyBOQi4gVGhpcyBj
b2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSwgc2luY2UgaXQgaXMgbm90IGludGVu
ZGVkIHRvIHJ1bgpAQCAtMjAyLDYgKzIwNCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBPcGVyYW5kczxzaXpl
X3Q+IGdldExvY2FsUG9zaXRpb25zKAorICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90
PiBzZXRMb2NhbFBvc2l0aW9ucygKKyAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmFyZ3VtZW50
KGkpID0gbm90U2V0OworICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmFyZ3VtZW50
KGkpID0gbm90U2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0gbm90U2V0OworICAg
ICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0gbm90U2V0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKQEAgLTIxMyw2ICsyMzEsMzYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlSW5k
ZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdldChub2RlSW5kZXgpKTsKICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMu
b3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLy8gT25s
eSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLgorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0
TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpICE9IG5vdFNldCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBv
c2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2tJbmRleCwgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRp
b25zLCBpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIyMSw2ICsyNjks
MjQgQEAgcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBHcmFwaER1bXBNb2RlIG1f
Z3JhcGhEdW1wTW9kZTsKICAgICAKKyAgICB2b2lkIGNoZWNrT3BlcmFuZCgKKyAgICAgICAgQmxv
Y2tJbmRleCBibG9ja0luZGV4LCBPcGVyYW5kczxzaXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywK
KyAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlvbnMsIGludCBvcGVyYW5k
KQorICAgIHsKKyAgICAgICAgaWYgKGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkg
PT0gbm90U2V0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIAorICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAg
IChibG9jay0+YXQoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSksCisgICAgICAg
ICAgICAgYmxvY2stPmF0KHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpLAorICAg
ICAgICAgICAgIGJsb2NrSW5kZXgpLAorICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3Bl
cmFuZChvcGVyYW5kKSA8IHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpOworICAg
IH0KKyAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgewogICAgICAgICBkYXRhTG9nKCJAJXUiLCBub2RlSW5kZXgpOwpAQCAtMjU2
LDYgKzMyMiwxMiBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KAorICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlSW5kZXggbm9k
ZUluZGV4MiwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgZGF0YUxvZygi
QCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZUluZGV4LCBub2RlSW5kZXgyLCBibG9ja0lu
ZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBOb2RlSW5k
ZXggZXhwZWN0ZWROb2RlSW5kZXgsIEVkZ2UgaW5jb21pbmdFZGdlKQogICAgIHsKICAgICAgICAg
ZGF0YUxvZygiQCV1IGluIEJsb2NrICMldSwgc2VhcmNoaW5nIGZvciBAJXUgZnJvbSBAJXUiLCBu
b2RlSW5kZXgsIGJsb2NrSW5kZXgsIGV4cGVjdGVkTm9kZUluZGV4LCBpbmNvbWluZ0VkZ2UuaW5k
ZXgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMTY4NTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDcgKzk2LDcgQEAgSklUOjpKSVQoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQgog
I2lmIEVOQUJMRShERkdfSklUKQogdm9pZCBKSVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRp
bWl6YXRpb25DaGVja0tpbmQga2luZCkKIHsKLSAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmco
KSkKKyAgICBpZiAoIWNhbkJlT3B0aW1pemVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtp
bmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvckxvb3AgOiBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0
dXJuKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcigpKSk7CkBAIC00MTgsNyArNDE4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBS
YXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZSA9IDA7Ci0gICAgICAgIGlmIChtX2NhbkJl
T3B0aW1pemVkKQorICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICAg
ICAgcmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxvY2stPmFkZFJhcmVDYXNlUHJvZmlsZShtX2J5
dGVjb2RlT2Zmc2V0KTsKICNlbmRpZgogCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJz
dFRvID09IChpdGVyIC0gMSktPnRvLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2Fz
ZSBjb2RlZ2VuLiIpOwogICAgICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAg
ICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
JnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CiAjZW5kaWYKIApAQCAtNTY2LDcgKzU2Niwy
NCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAjZW5kaWYKICAg
ICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgbV9jYW5CZU9wdGltaXplZCA9IG1f
Y29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGxldmVsID0gbV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgc3dpdGNoIChs
ZXZlbCkgeworICAgIGNhc2UgREZHOjpDYW5ub3RDb21waWxlOgorICAgICAgICBtX2NhbkJlT3B0
aW1pemVkID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIERGRzo6U2hvdWxkUHJvZmlsZToKKyAgICAgICAgbV9j
YW5CZU9wdGltaXplZCA9IGZhbHNlOworICAgICAgICBtX3Nob3VsZEVtaXRQcm9maWxpbmcgPSB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERGRzo6Q2FuQ29tcGlsZToKKyAgICAgICAg
bV9jYW5CZU9wdGltaXplZCA9IHRydWU7CisgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAjZW5kaWYKIAogICAgIC8vIEp1c3Qg
YWRkIGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2RlZ2VuCkBAIC02MjAsNyAr
NjM3LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgIExh
YmVsIGZ1bmN0aW9uQm9keSA9IGxhYmVsKCk7CiAgICAgCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQotICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgIGlmIChjYW5CZU9wdGltaXplZCgp
KQogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmbV9jb2Rl
QmxvY2stPm1fZXhlY3V0aW9uRW50cnlDb3VudCkpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtODM3LDcgKzgzNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgICAgIGJvb2wgY2FuQmVPcHRpbWl6ZWQo
KSB7IHJldHVybiBtX2NhbkJlT3B0aW1pemVkOyB9Ci0gICAgICAgIGJvb2wgc2hvdWxkRW1pdFBy
b2ZpbGluZygpIHsgcmV0dXJuIG1fY2FuQmVPcHRpbWl6ZWQ7IH0KKyAgICAgICAgYm9vbCBzaG91
bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1cm4gbV9zaG91bGRFbWl0UHJvZmlsaW5nOyB9CiAjZWxz
ZQogICAgICAgICBib29sIGNhbkJlT3B0aW1pemVkKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAg
ICAgLy8gRW5hYmxlcyB1c2Ugb2YgdmFsdWUgcHJvZmlsZXIgd2l0aCB0aWVyZWQgY29tcGlsYXRp
b24gdHVybmVkIG9mZiwKQEAgLTg4Niw2ICs4ODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOwor
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdFByb2ZpbGluZzsKICNlbmRpZgogICAgIH0gSklUX0NM
QVNTX0FMSUdOTUVOVDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsNyArODE4LDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIAogICAgIGVsc2UgewogICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCi0gICAgICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKSB7CisgICAgICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBt
ZWFzdXJlIGlmIHRoaXMgaXMgdGFraW5nIHRoZSBzbG93IGNhc2UganVzdAogICAgICAgICAgICAg
Ly8gYmVjYXVzZSBvZiBuZWdhdGl2ZSB6ZXJvLiBJZiB0aGlzIHByb2R1Y2VzIHBvc2l0aXZlIHpl
cm8sIHRoZW4gd2UKICAgICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhlIHNsb3cgY2FzZSB0byBi
ZSB0YWtlbiBiZWNhdXNlIHRoYXQgd2lsbCB0aHJvdyBvZmYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNp
b24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAvLyBJZiB3ZSBzdWNjZWVkIGluIGFs
bCBvZiBvdXIgY2hlY2tzLCBhbmQgdGhlIGNvZGUgd2FzIG9wdGltaXphYmxlLCB0aGVuIG1ha2Ug
c3VyZSB3ZQogICAgIC8vIGRlY3JlbWVudCB0aGUgcmFyZSBjYXNlIGNvdW50ZXIuCiAjaWYgRU5B
QkxFKFZBTFVFX1BST0ZJTEVSKQotICAgIGlmIChtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhE
RkcoKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKSA+PSBERkc6
OlNob3VsZFByb2ZpbGUpIHsKICAgICAgICAgc3ViMzIoCiAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoMSksCiAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MoJm1fY29kZUJsb2NrLT5yYXJlQ2Fz
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCktPm1fY291
bnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsNyArNTEzLDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIC8vIElmIHdl
IHN1Y2NlZWQgaW4gYWxsIG9mIG91ciBjaGVja3MsIGFuZCB0aGUgY29kZSB3YXMgb3B0aW1pemFi
bGUsIHRoZW4gbWFrZSBzdXJlIHdlCiAgICAgLy8gZGVjcmVtZW50IHRoZSByYXJlIGNhc2UgY291
bnRlci4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgaWYgKG1fY29kZUJsb2NrLT5j
YW5Db21waWxlV2l0aERGRygpKSB7CisgICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0
aERGRygpID49IERGRzo6U2hvdWxkUHJvZmlsZSkgewogICAgICAgICBzdWIzMigKICAgICAgICAg
ICAgIFRydXN0ZWRJbW0zMigxKSwKICAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcygmbV9jb2Rl
QmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KHN0dWJJbmZvLT5ieXRlY29k
ZUluZGV4KS0+bV9jb3VudGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcs
NyBAQCB2b2lkIENvZGVQcm9maWxlOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqCiAgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG93bmVyVUlE
KTsKICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpE
RkdKSVQpCiAgICAgICAgICAgICAgICAgdHlwZSA9IERGR0pJVDsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGNvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpID09IENvZGVCbG9jazo6Q29t
cGlsZVdpdGhERkdGYWxzZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+Y2FuQ29t
cGlsZVdpdGhERkdTdGF0ZSgpICE9IERGRzo6Q2FuQ29tcGlsZSkKICAgICAgICAgICAgICAgICB0
eXBlID0gQmFzZWxpbmVPbmx5OwogICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpKQogICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9TUjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141610</attachid>
            <date>2012-05-13 12:03:48 -0700</date>
            <delta_ts>2012-05-13 13:30:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>foo_apply_bar_arguments_patch_3.diff</filename>
            <type>text/plain</type>
            <size>44156</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEyLTA1LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIGZvby5hcHBseShiYXIsIGFyZ3VtZW50cykK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MzA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
bmFibGVzIGNvbXBpbGF0aW9uIG9mIG9wX2puZXFfcHRyIGFuZCBzb21lIGZvcm1zIG9mIG9wX2Nh
bGxfdmFyYXJncy4KKyAgICAgICAgCisgICAgICAgIEFsc28gaW5jbHVkZXMgYSBidW5jaCBvZiBi
dWcgZml4ZXMgdGhhdCB3ZXJlIG1hZGUgbmVjZXNzYXJ5IGJ5IHRoZSBpbmNyZWFzZWQKKyAgICAg
ICAgcHJlc3N1cmUgb24gdGhlIENGRyBzaW1wbGlmaWVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBhIDEtMiUgd2luIG9uIFY4LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVC
bG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR1N0YXRlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoRXZh
bENvZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhUYWlsT3BlcmFuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OmdldExvY2FsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKENTRVBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGVidWdGYWlsKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGUpOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlT3Bjb2Rlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6OmNh
bkNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlRnVuY3Rpb25G
b3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHRHJpdmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAo
VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OmNoZWNrT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhP
cCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6c2FtcGxlKToKKwogMjAxMi0wNS0xMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgYmUgYWJsZSB0
byBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgdXNlIGFyZ3VtZW50cyByZWZsZWN0aXZlbHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50Q2FsbE9wKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgZGF0YUxvZygiIGxsaW50KG5vdCBz
ZXQpIik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBKU0Z1bmN0aW9uKiB0YXJn
ZXQgPSBnZXRDYWxsTGlua0luZm8obG9jYXRpb24pLmxhc3RTZWVuQ2FsbGVlLmdldCgpOwotICAg
ICAgICBpZiAodGFyZ2V0KQotICAgICAgICAgICAgZGF0YUxvZygiIGppdCglcCwgZXhlYyAlcCki
LCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZGF0YUxvZygiIGppdChub3Qgc2V0KSIpOworICAgICAgICBpZiAobnVtYmVyT2ZDYWxsTGlu
a0luZm9zKCkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGdldENhbGxMaW5r
SW5mbyhsb2NhdGlvbikubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAodGFy
Z2V0KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBqaXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0
LCB0YXJnZXQtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiIGppdChub3Qgc2V0KSIpOworICAgICAgICB9CiAjZW5kaWYKICAgICB9CiAg
ICAgZGF0YUxvZygiXG4iKTsKQEAgLTE1ODAsNyArMTU4Miw3IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQor
ICAgICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQogI2VuZGlmCiB7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkp
OwpAQCAtMjQ0NywxNyArMjQ0OSwxNyBAQCBKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNv
bXBpbGVPcHRpCiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1ib29sIFByb2dyYW1Db2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQorREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3Jh
bUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERG
Rzo6Y2FuQ29tcGlsZVByb2dyYW0odGhpcyk7CiB9CiAKLWJvb2wgRXZhbENvZGVCbG9jazo6Y2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBFdmFsQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5D
b21waWxlRXZhbCh0aGlzKTsKIH0KIAotYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FuQ29tcGls
ZVdpdGhERkdJbnRlcm5hbCgpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9j
azo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1faXNDb25zdHJ1Y3Rv
cikKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KHRo
aXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMjAgKzM5NiwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9
IDA7CiAKLSAgICAgICAgZW51bSBDb21waWxlV2l0aERGR1N0YXRlIHsKLSAgICAgICAgICAgIENv
bXBpbGVXaXRoREZHRmFsc2UsCi0gICAgICAgICAgICBDb21waWxlV2l0aERGR1RydWUsCi0gICAg
ICAgICAgICBDb21waWxlV2l0aERGR1Vuc2V0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7Ci0gICAgICAgIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkcoKQorICAgICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7CisgICAgICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGVXaXRoREZHKCkKICAgICAgICAgewotICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7Ci0gICAgICAgICAgICBtX2NhbkNvbXBp
bGVXaXRoREZHU3RhdGUgPSByZXN1bHQgPyBDb21waWxlV2l0aERGR1RydWUgOiBDb21waWxlV2l0
aERGR0ZhbHNlOworICAgICAgICAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0aERG
R1N0YXRlID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQot
ICAgICAgICBDb21waWxlV2l0aERGR1N0YXRlIGNhbkNvbXBpbGVXaXRoREZHU3RhdGUoKSB7IHJl
dHVybiBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7IH0KKyAgICAgICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhE
RkdTdGF0ZTsgfQogCiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAg
ICAgICB7CkBAIC0xMzE0LDcgKzEzMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICBPd25QdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7CisgICAgICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICNlbmRpZgog
ICAgIH07CiAKQEAgLTEzNTYsNyArMTM1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJ
bXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAg
ICAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkBAIC0xMzkxLDcgKzEzODUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERG
R0ludGVybmFsKCk7CisgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpAQCAtMTQyOSw3
ICsxNDIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNv
bigpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAg
ICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogICAg
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0MCw4ICsyMzQwLDUw
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0LCBD
b2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0cnVjdCk7
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAv
LyBJdCB3b3VsZCBiZSBjb29sIHRvIGZ1bm5lbCB0aGlzIGludG8gaGFuZGxlQ2FsbCgpIHNvIHRo
YXQgaXQgY2FuIGhhbmRsZQorICAgICAgICAgICAgLy8gaW5saW5pbmcuIEJ1dCBjdXJyZW50bHkg
dGhhdCB3b24ndCBiZSBwcm9maXRhYmxlIGFueXdheSwgc2luY2Ugbm9uZSBvZiB0aGUKKyAgICAg
ICAgICAgIC8vIHVzZXMgb2YgY2FsbF92YXJhcmdzIHdpbGwgYmUgaW5saW5lYWJsZS4gU28gd2Ug
c2V0IHRoaXMgdXAgbWFudWFsbHkgYW5kCisgICAgICAgICAgICAvLyB3aXRob3V0IGlubGluZS9p
bnRyaW5zaWMgZGV0ZWN0aW9uLgorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnN0cnVjdGlv
biogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IFByZWRpY3ROb25lOworICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3Vs
dCkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAg
cHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIGlmIChSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMp
CisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOyAvLyBjYWxs
ZWUKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7IC8vIHRoaXMKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgaWYg
KGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9w
X2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfY2FsbF9wdXRfcmVzdWx0OgogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRf
cmVzdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgICAg
ICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8g
bGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCisgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1l
ciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwor
ICAgICAgICAgICAgLy8gYWxyZWFkeSBnbmFybHkgZW5vdWdoIGFzIGl0IGlzLgorICAgICAgICAg
ICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBDaGVja0Z1bmN0aW9uLCBPcEluZm8oY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsLmdldCgpKSwKKyAgICAgICAgICAgICAgICBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFw
aChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfcHRy
KSkpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogCiAgICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZTogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
Z2V0UHJlZGljdGlvbigpOwpAQCAtMjQ2Myw4ICsyNTA1LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEFTU0VSVChjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKSk7CiAgICAgfQogfQogCkBAIC0yNDc3
LDYgKzI1MTcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAg
ICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwogICAgICAgICBwaGlT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIAorICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAogICAgICAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNz
b3JzOwogICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwpAQCAtMjkwOSwxMiArMjk1Miw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKIAogICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgbV9n
cmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmNsZWFyKCk7Ci0gICAgfQogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGxvY2FsIHZhcmlhYmxlIHBoaXMuXG4iKTsKICNl
bmRpZgpAQCAtMjkyNiw2ICsyOTYzLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkK
ICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGFyZ3VtZW50IHBoaXMuXG4iKTsKICNlbmRpZgogICAg
IHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOworCisgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVChibG9jayk7CisgICAgICAg
IGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KICAgICAKICAgICBmaXhWYXJpYWJsZUFjY2Vzc1By
ZWRpY3Rpb25zKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nl
c3NvcihibG9jaywgMCksIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJD
aGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMjU2LDEy
ICsyNTcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwogICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkp
CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRh
TG9nKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LlxuIiwgZWRnZS5pbmRleCgpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOworI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgTm9kZUluZGV4IG9yaWdpbmFsTm9k
ZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2FsKCkpOwor
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxv
ZygiICAgICAgICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1LlxuIiwgb3JpZ2luYWxOb2RlSW5k
ZXgpOworI2VuZGlmCiAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUp
OwogICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRl
eF07Ci0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBpZiAoY2hhbmdlUmVmKQorICAgICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6CiAgICAgICAgIC8vIFNl
dExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhp
bmcgdGhhdCBpcyBpbW1lZGlhdGVseQogICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBm
aXJzdCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgpAQCAtMjgxLDE1ICsyOTMsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIFNldExvY2FsOiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCdzIGEgU2V0TG9j
YWwuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChlZGdlLCBv
cmlnaW5hbE5vZGUtPmNoaWxkMSgpLmluZGV4KCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CisjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
ICBJdCdzIGEgR2V0TG9jYWwuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChlZGdlLCBvcmlnaW5hbE5vZGVJbmRleCwgY2hhbmdlUmVmKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCdzIFBoaS9TZXRBcmd1bWVudC5cbiIpOworI2Vu
ZGlmCiAgICAgICAgICAgICAvLyBLZWVwIHRoZSBHZXRMb2NhbCEKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC00MTcsMTIgKzQzOCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgTm9k
ZSYgc2Vjb25kTm9kZSA9IG1fZ3JhcGhbYXRTZWNvbmRUYWlsXTsKICAgICAgICAgCi0gICAgICAg
IGlmIChzZWNvbmROb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNvbWV0aGluZyB0byBhIHZhcmlhYmxl
IHRoYXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4KLSAgICAgICAgICAgIGZpcnN0Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBzd2l0Y2ggKHNl
Y29uZE5vZGUub3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZs
dXNoOiB7CkBAIC00NDIsMTMgKzQ1NywzNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUg
Zmlyc3QgYmxvY2ssIGFuZCBhZGp1c3QgdGhlIHN1YnN0aXR1dGlvbiB0byBhY2NvdW50IGZvcgot
ICAgICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCBzdWNjZXNzb3JzIHdpbGwgcmVmZXIgdG8gdGhl
IGNoaWxkIG9mIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOwotICAgICAgICAgICAg
c3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0KLSAgICAgICAgICAgICAgICBPcGVyYW5k
U3Vic3RpdHV0aW9uKAotICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxkMSgpLmlu
ZGV4KCksCi0gICAgICAgICAgICAgICAgICAgIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAgICAgICAgICAgLy8gSWYgaXQncyBh
IEdldExvY2FsIG9uIGEgY2FwdHVyZWQgdmFyLCB0aGVuIGRlZmluaXRlbHkga2VlcCB3aGF0IHdh
cworICAgICAgICAgICAgLy8gaW4gdGhlIHNlY29uZCBibG9jay4gSW4gcGFydGljdWxhciwgaXQn
cyBwb3NzaWJsZSB0aGF0IHRoZSBmaXJzdAorICAgICAgICAgICAgLy8gYmxvY2sgZG9lc24ndCBl
dmVuIGtub3cgYWJvdXQgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgIGlmIChzZWNvbmROb2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICBm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IGF0U2Vjb25kVGFp
bDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzZWNvbmQgYmxvY2sgaGFkIGEg
R2V0TG9jYWwgYW5kIHRoZSBmaXJzdCBibG9jaworICAgICAgICAgICAgLy8gaGFkIGEgU2V0QXJn
dW1lbnQgb3IgYSBQaGkuIFRoZW4gdXBkYXRlIHRoZSB0YWlsLiBPdGhlcndpc2Uga2VlcCB3aGF0
IHdhcyBpbiB0aGUKKyAgICAgICAgICAgIC8vIGZpcnN0IGJsb2NrLgorICAgICAgICAgICAgTm9k
ZUluZGV4IGF0Rmlyc3RUYWlsID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICBBU1NFUlQoYXRGaXJzdFRhaWwgIT0gTm9Ob2RlKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV9ncmFwaFthdEZpcnN0VGFpbF0ub3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAg
ICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNv
bmRUYWlsOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQg
YWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNjb3VudCBmb3IKKyAgICAgICAgICAgICAgICAv
LyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhl
IEdldExvY2FsLgorICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIHN1YnN0
aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKSA9CisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmRT
dWJzdGl0dXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxkMSgp
LmluZGV4KCksCisgICAgICAgICAgICAgICAgICAgICAgICBza2lwR2V0TG9jYWwoZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTQ5Niw3ICs1MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFBoYW50b20gJiYgISFub2RlLmNoaWxkMSgpKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7CisgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5l
cmF0ZSgpKTsKICAgICAgICAgICAgICAgICBOb2RlJiBwb3NzaWJsZUxvY2FsT3AgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldOwogICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AuaGFz
TG9jYWwoKSkgewpAQCAtNTA2LDYgKzU0NywyOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBpZiAoc2V0TG9jYWwub3AoKSA9PSBTZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaDogewor
ICAgICAgICAgICAgICAgIGlmIChmYWxzZSAmJiBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5p
c0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIFRoZSBmbHVzaCBjb3VsZCB1c2UgYSBHZXRMb2NhbCwgU2V0
TG9jYWwsIFNldEFyZ3VtZW50LCBvciBhIFBoaS4KKyAgICAgICAgICAgICAgICAvLyBJZiBpdCB1
c2VzIGEgR2V0TG9jYWwsIGl0J2xsIGJlIHRha2VuIGNhcmUgb2YgYmVsb3cuIElmIGl0IHVzZXMg
YQorICAgICAgICAgICAgICAgIC8vIFNldExvY2FsIG9yIFNldEFyZ3VtZW50LCB0aGVuIGl0IG11
c3QgYmUgdXNpbmcgYSBub2RlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSBibG9j
ay4gQnV0IGlmIGl0IHVzZXMgYSBQaGksIHRoZW4gd2Ugc2hvdWxkIHJlZGlyZWN0IGl0IHRvCisg
ICAgICAgICAgICAgICAgLy8gdXNlIHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBhZHZlcnRpc2Vk
IGFzIGEgdGFpbCBvcGVyYW5kLgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggYXRGaXJzdEluZGV4ID0gZmlyc3RC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgRWRnZShhdEZp
cnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVm
ID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNiArNDQxLDMx
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAgIE5v
ZGVJbmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJp
YWJsZUFjY2Vzc0RhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0g
dmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGls
ZDEoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVy
c1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oRWRn
ZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlm
IHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCkBAIC00NjIsMTUgKzQ4NywxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50KQorICAgIGJvb2wg
c2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50KQogICAgIHsKICAgICAgICAgaWYg
KHJlcGxhY2VtZW50ID09IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0
byBwZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0aGUgcHJlZGljdGlvbnMgZG9uJ3QKICAgICAgICAg
Ly8gYWdyZWUuCiAgICAgICAgIGlmIChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9u
KCkgIT0gbV9ncmFwaFtyZXBsYWNlbWVudF0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgIFJlcGxhY2lu
ZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKQEAgLTQ4Miw2ICs1
MDcsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3
aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCiAgICAgICAgIG1fcmVw
bGFjZW1lbnRzW21fY29tcGlsZUluZGV4XSA9IHJlcGxhY2VtZW50OworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHZvaWQgZWxpbWluYXRlKCkKQEAgLTU2
OSw2ICs1OTYsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVD
U0Uobm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBHZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKCF2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIE5vZGVJbmRleCBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2Fk
RWxpbWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgIGlmICghc2V0UmVw
bGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFpbEluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKAorICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bG9jYWwoKSk7CisgICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1fY29tcGlsZUluZGV4
KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICBw
b3NzaWJsZVJlcGxhY2VtZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAg
ICAgICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBuZWNlc3NhcnkuIFNvbWUgcGhhc2VzIHdpbGwg
Y29udmVydCBub2RlcyB0byBjb25zdGFudHMsCiAgICAgICAgICAgICAvLyB3aGljaCBtYXkgcmVz
dWx0IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NFIHRvIGNsZWFuIHRoaXMgdXAu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMzICszNCw1NiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotc3RhdGljIGlu
bGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2Rl
SUQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsb2NrLCBP
cGNvZGVJRCBvcGNvZGVJRCwgYm9vbCByZXN1bHQpCiB7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1
bHQsICFyZXN1bHQpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9n
KCJDYW5ub3QgaGFuZGxlIGNvZGUgYmxvY2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMuXG4iLCBj
b2RlQmxvY2ssIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShjb2RlQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShvcGNvZGVJRCk7CisgICAgVU5VU0VEX1BB
UkFNKHJlc3VsdCk7CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8Ym9vbCAoKmNhbkhhbmRsZU9wY29k
ZSkoT3Bjb2RlSUQpPgotYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2Nr
KQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bj
b2RlSUQgb3Bjb2RlSUQsIENhcGFiaWxpdHlMZXZlbCByZXN1bHQpCit7CisgICAgQVNTRVJUKHJl
c3VsdCAhPSBDYW5Db21waWxlKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAg
aWYgKHJlc3VsdCA9PSBDYW5ub3RDb21waWxlKQorICAgICAgICBkYXRhTG9nKCJDYW5ub3QgaGFu
ZGxlIGNvZGUgYmxvY2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMuXG4iLCBjb2RlQmxvY2ssIG9w
Y29kZU5hbWVzW29wY29kZUlEXSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gU2hvdWxkUHJvZmlsZSk7CisgICAgICAgIGRhdGFMb2coIkNhbm5vdCBjb21waWxlIGNvZGUg
YmxvY2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMsIGJ1dCBpbmxpbmluZyBtaWdodCBiZSBwb3Nz
aWJsZS5cbiIsIGNvZGVCbG9jaywgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdKTsKKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShvcGNvZGVJ
RCk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgUmV0dXJuVHlwZSAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQs
IENvZGVCbG9jayosIEluc3RydWN0aW9uKik+CitSZXR1cm5UeXBlIGNhbkhhbmRsZU9wY29kZXMo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVyblR5cGUgaW5pdGlhbFZhbHVlKQogewogICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnBy
ZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIFJldHVyblR5cGUgcmVzdWx0ID0g
aW5pdGlhbFZhbHVlOwogICAgIAogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAw
OyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7ICkgewogICAgICAgICBzd2l0Y2gg
KGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNl
dF0udS5vcGNvZGUpKSB7Ci0jZGVmaW5lIERFRklORV9PUChvcGNvZGUsIGxlbmd0aCkgICAgICAg
ICAgICAgICBcCi0gICAgICAgIGNhc2Ugb3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBpZiAoIWNhbkhhbmRsZU9wY29kZShvcGNvZGUpKSB7ICAgICBcCi0g
ICAgICAgICAgICAgICAgZGVidWdGYWlsKGNvZGVCbG9jaywgb3Bjb2RlKTsgICBcCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBieXRlY29k
ZU9mZnNldCArPSBsZW5ndGg7ICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsKKyNkZWZp
bmUgREVGSU5FX09QKG9wY29kZSwgbGVuZ3RoKSBcCisgICAgICAgIGNhc2Ugb3Bjb2RlOiB7IFwK
KyAgICAgICAgICAgIFJldHVyblR5cGUgY3VycmVudCA9IGNhbkhhbmRsZU9wY29kZSggXAorICAg
ICAgICAgICAgICAgIG9wY29kZSwgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVj
b2RlT2Zmc2V0KTsgXAorICAgICAgICAgICAgaWYgKGN1cnJlbnQgPCByZXN1bHQpIHsgXAorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7IFwKKyAgICAgICAgICAgICAgICBkZWJ1Z0Zh
aWwoY29kZUJsb2NrLCBvcGNvZGUsIGN1cnJlbnQpOyBcCisgICAgICAgICAgICB9IFwKKyAgICAg
ICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgXAorICAgICAgICAgICAgYnJlYWs7IFwK
KyAgICAgICAgfQogICAgICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKICN1
bmRlZiBERUZJTkVfT1AKICAgICAgICAgZGVmYXVsdDoKQEAgLTY5LDE5ICs5MiwxOSBAQCBib29s
IGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvCiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBjYW5D
b21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0NhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoIU1hY3JvQXNz
ZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbkNvbXBpbGVPcGNvZGU+KGNvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIHJldHVybiBjYW5IYW5kbGVPcGNv
ZGVzPENhcGFiaWxpdHlMZXZlbCwgY2FuQ29tcGlsZU9wY29kZT4oY29kZUJsb2NrLCBDYW5Db21w
aWxlKTsKIH0KIAogYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewotICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbklubGluZU9wY29kZT4oY29kZUJsb2Nr
KTsKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2Rlczxib29sLCBjYW5JbmxpbmVPcGNvZGU+KGNv
ZGVCbG9jaywgdHJ1ZSk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIERGR0NhcGFiaWxpdGllc19oCiAKICNpbmNsdWRlICJJbnRyaW5z
aWMuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKQEAgLTY3LDcgKzY4LDcg
QEAgaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cgogfQogCiAvLyBPcGNv
ZGUgY2hlY2tpbmcuCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29k
ZUlEKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiopCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgewogICAgIGNhc2Ugb3BfZW50ZXI6CkBAIC0xNzAsMTQgKzE3MSwxOCBAQCBpbmxpbmUgYm9v
bCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6
CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3Vt
ZW50c19sZW5ndGg6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ugb3Bfam5lcV9wdHI6
CisgICAgICAgIHJldHVybiBDYW5Db21waWxlOwogICAgICAgICAKKyAgICBjYXNlIG9wX2NhbGxf
dmFyYXJnczoKKyAgICAgICAgcmV0dXJuIFNob3VsZFByb2ZpbGU7CisKICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAg
IH0KIH0KIAotaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQor
aW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBjKQogewogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsK
ICAgICAgICAgCkBAIC0xOTUsNyArMjAwLDYgQEAgaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2Rl
KE9wY29kZUlEIG9wYwogICAgICAgICAKICAgICAvLyBJbmxpbmluZyBkb2Vzbid0IGNvcnJlY3Rs
eSByZW1hcCByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmFuZHMuCiAgICAgY2FzZSBvcF9uZXdfcmVn
ZXhwOgotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgaW5saW5pbmcgY29kZSB0aGF0IGNyZWF0ZXMgYWN0aXZhdGlvbnMgb3IgaGFzIG5lc3Rl
ZCBmdW5jdGlvbnMuCiAgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKQEAgLTIwNCwxMiAr
MjA4LDE3IEBAIGlubGluZSBib29sIGNhbklubGluZU9wY29kZShPcGNvZGVJRCBvcGMKICAgICBj
YXNlIG9wX25ld19mdW5jX2V4cDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAg
ICAvLyBJbmxpbmluZyBzdXBwb3J0cyBvcF9jYWxsX3ZhcmFyZ3MgaWYgaXQncyBhIGNhbGwgdGhh
dCBqdXN0IGZvcndhcmRzIHRoZSBjYWxsZXIncworICAgIC8vIGFyZ3VtZW50cy4KKyAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHBjWzNdLnUub3BlcmFuZCA9PSBjb2Rl
QmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCk7CisgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKTsKKyAgICAgICAgcmV0dXJuIGNh
bkNvbXBpbGVPcGNvZGUob3Bjb2RlSUQsIGNvZGVCbG9jaywgcGMpID09IENhbkNvbXBpbGU7CiAg
ICAgfQogfQogCi1ib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOworQ2FwYWJpbGl0
eUxldmVsIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOwogYm9vbCBjYW5JbmxpbmVPcGNv
ZGVzKENvZGVCbG9jayopOwogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBpbmxpbmUgYm9vbCBt
aWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yMTksMzAg
KzIyOCw0MiBAQCBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0CiBpbmxp
bmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBm
YWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2Rl
QmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2Rl
KE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2Rl
KE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29k
ZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKSB7IHJl
dHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlELCBDb2Rl
QmxvY2sqLCBJbnN0cnVjdGlvbiopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgQ2FwYWJpbGl0
eUxldmVsIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBp
bmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLWlubGluZSBib29sIGNhbkNvbXBpbGVFdmFs
KENvZGVCbG9jayogY29kZUJsb2NrKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
RXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gbWlnaHRDb21waWxlRXZh
bChjb2RlQmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CisgICAgaWYgKCFt
aWdodENvbXBpbGVFdmFsKGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OworICAgIAorICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCi1p
bmxpbmUgYm9vbCBjYW5Db21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGlu
ZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7Ci0gICAgcmV0dXJuIG1pZ2h0Q29tcGlsZVByb2dyYW0oY29kZUJsb2NrKSAmJiBjYW5Db21w
aWxlT3Bjb2Rlcyhjb2RlQmxvY2spOworICAgIGlmICghbWlnaHRDb21waWxlUHJvZ3JhbShjb2Rl
QmxvY2spKQorICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1cm4g
Y2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAotaW5saW5lIGJvb2wgY2FuQ29tcGls
ZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
LSAgICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2Fu
Q29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ2FsbChjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAK
KyAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAotaW5saW5lIGJv
b2wgY2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQor
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9y
Q29uc3RydWN0KGNvZGVCbG9jaykgJiYgY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKKyAg
ICBpZiAoIW1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykpCisgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYW5Db21waWxlT3Bj
b2Rlcyhjb2RlQmxvY2spOwogfQogCiBpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNh
bGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBlbnVtIFNwaWxs
UmVnaXN0ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBECiAKIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jl
c3VsdCB9OwogCitlbnVtIENhcGFiaWxpdHlMZXZlbCB7IENhbm5vdENvbXBpbGUsIFNob3VsZFBy
b2ZpbGUsIENhbkNvbXBpbGUsIENhcGFiaWxpdHlMZXZlbE5vdFNldCB9OworCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNyArNTAsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAg
ICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09
IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLQorICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBl
eGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ss
IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsx
NjksOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgICAg
ICBkYXRhTG9nKCIlc0AldSVzIiwKICAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5n
KG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLnVzZUtpbmQoKSksCiAgICAgICAgICAgICAgICAg
ICAgIG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCksCi0gICAgICAgICAgICAgICAg
ICAgIHByZWRpY3Rpb25Ub0FiYnJldmlhdGVkU3RyaW5nKGF0KGNoaWxkSWR4KS5wcmVkaWN0aW9u
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvblRvQWJicmV2aWF0ZWRTdHJpbmco
CisgICAgICAgICAgICAgICAgICAgICAgICBhdChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSku
cHJlZGljdGlvbigpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoISFu
b2RlLmNoaWxkMSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0NSw3ICs5NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlKQogewogICAgIFBfREZH
T3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlvbjsKLQorICAgIAogICAgIGlmIChub2RlLm9wKCkg
PT0gQ2FsbCkKICAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOwog
ICAgIGVsc2UgewpAQCAtOTY0LDggKzk2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUmIG5vZGUKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogICAg
IHVzZShjYWxsZWVFZGdlKTsKICAgICAKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZp
cnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKLSAg
ICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUg
YXJndW1lbnRzLgorICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMg
dGhlIGZ1bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAgLy8gYXJn
dW1lbnRzLgogICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsK
ICAgICAKICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVt
UGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50KSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QoUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDgg
QEAgcHVibGljOgogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCisgICAgI2RlZmluZSBu
b3RTZXQgKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorCiAgICAgdm9pZCB2YWxpZGF0ZSgpCiAg
ICAgewogICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3Jt
YW5jZSwgc2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgpAQCAtMjAyLDYgKzIwNCwyMiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAorICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwor
ICAgICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKKyAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGdldExvY2FsUG9zaXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OworICAgICAgICAgICAgICAg
IHNldExvY2FsUG9zaXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLmxvY2FsKGkpID0gbm90U2V0OworICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25z
LmxvY2FsKGkpID0gbm90U2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTIxMyw2ICsyMzEsMzcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdl
dChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9j
a0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNl
dCk7CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5s
b2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBU
aGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCisgICAgICAgICAgICAgICAgICAgIC8vIGJl
Y2F1c2Ugb2YgZmx1c2hpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJh
bmQobm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2tJbmRleCwgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBh
cmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAorICAgICAgICAgICAgICAgICAg
ICBibG9ja0luZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjIxLDYgKzI3MCwyNCBAQCBwcml2
YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBN
b2RlOwogICAgIAorICAgIHZvaWQgY2hlY2tPcGVyYW5kKAorICAgICAgICBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAorICAgICAgICBP
cGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCisgICAgewor
ICAgICAgICBpZiAoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG9wZXJhbmQpID09IG5vdFNldCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgKGJsb2NrLT5h
dChnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpKSwKKyAgICAgICAgICAgICBibG9j
ay0+YXQoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSksCisgICAgICAgICAgICAg
YmxvY2tJbmRleCksCisgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpIDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQorICAgIAog
ICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkKICAg
ICB7CiAgICAgICAgIGRhdGFMb2coIkAldSIsIG5vZGVJbmRleCk7CkBAIC0yNTYsNiArMzIzLDEy
IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBC
bG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUgYW5kIEAl
dSBpbiBCbG9jayAjJXUiLCBub2RlSW5kZXgsIG5vZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAogICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3Rl
ZE5vZGVJbmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewogICAgICAgICBkYXRhTG9nKCJA
JXUgaW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRleCwg
YmxvY2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYs
NyBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiAjaWYgRU5BQkxF
KERGR19KSVQpCiB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNo
ZWNrS2luZCBraW5kKQogewotICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgIGlm
ICghY2FuQmVPcHRpbWl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEp1bXAgc2tp
cE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29w
T3B0aW1pemF0aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCA6IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4pLCBBYnNv
bHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsK
QEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFJhcmVDYXNlUHJv
ZmlsZSogcmFyZUNhc2VQcm9maWxlID0gMDsKLSAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQp
CisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByYXJlQ2Fz
ZVByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YWRkUmFyZUNhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZz
ZXQpOwogI2VuZGlmCiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gKGl0
ZXIgLSAxKS0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4u
Iik7CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAgICAgaWYgKG1f
Y2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAg
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQ
cm9maWxlLT5tX2NvdW50ZXIpKTsKICNlbmRpZgogCkBAIC01NjYsNyArNTY2LDI0IEBAIEpJVENv
ZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICNlbmRpZgogICAgIAogI2lmIEVO
QUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2RlQmxvY2st
PmNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBt
X2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBzd2l0Y2ggKGxldmVsKSB7Cisg
ICAgY2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CisgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBm
YWxzZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgREZHOjpTaG91bGRQcm9maWxlOgorICAgICAgICBtX2NhbkJlT3B0aW1p
emVkID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgorICAgICAgICBtX2NhbkJlT3B0
aW1pemVkID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KICNlbmRpZgogCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0
bGUgYml0IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTYyMCw3ICs2MzcsNyBAQCBK
SVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgTGFiZWwgZnVuY3Rp
b25Cb2R5ID0gbGFiZWwoKTsKICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAg
aWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCiAgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9l
eGVjdXRpb25FbnRyeUNvdW50KSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNyArODM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJu
IG1fY2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkg
eyByZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQorICAgICAgICBib29sIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAg
IGJvb2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFi
bGVzIHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQg
b2ZmLApAQCAtODg2LDYgKzg4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CisgICAgICAgIGJv
b2wgbV9zaG91bGRFbWl0UHJvZmlsaW5nOwogI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1NfQUxJR05N
RU5UOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw3ICs4MTgsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgCiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvcGNvZGVJRCA9PSBvcF9tdWwpOwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAg
ICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaWYg
dGhpcyBpcyB0YWtpbmcgdGhlIHNsb3cgY2FzZSBqdXN0CiAgICAgICAgICAgICAvLyBiZWNhdXNl
IG9mIG5lZ2F0aXZlIHplcm8uIElmIHRoaXMgcHJvZHVjZXMgcG9zaXRpdmUgemVybywgdGhlbiB3
ZQogICAgICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGUgc2xvdyBjYXNlIHRvIGJlIHRha2VuIGJl
Y2F1c2UgdGhhdCB3aWxsIHRocm93IG9mZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTY4NTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIC8vIElmIHdlIHN1Y2NlZWQgaW4gYWxsIG9mIG91ciBj
aGVja3MsIGFuZCB0aGUgY29kZSB3YXMgb3B0aW1pemFibGUsIHRoZW4gbWFrZSBzdXJlIHdlCiAg
ICAgLy8gZGVjcmVtZW50IHRoZSByYXJlIGNhc2UgY291bnRlci4KICNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpKSB7Cisg
ICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpID49IERGRzo6U2hvdWxkUHJv
ZmlsZSkgewogICAgICAgICBzdWIzMigKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSwKICAg
ICAgICAgICAgIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+bV9jb3VudGVyKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgLy8gSWYgd2Ugc3VjY2VlZCBp
biBhbGwgb2Ygb3VyIGNoZWNrcywgYW5kIHRoZSBjb2RlIHdhcyBvcHRpbWl6YWJsZSwgdGhlbiBt
YWtlIHN1cmUgd2UKICAgICAvLyBkZWNyZW1lbnQgdGhlIHJhcmUgY2FzZSBjb3VudGVyLgogI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVX
aXRoREZHKCkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCkgPj0g
REZHOjpTaG91bGRQcm9maWxlKSB7CiAgICAgICAgIHN1YjMyKAogICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKDEpLAogICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+cmFy
ZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5t
X2NvdW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9m
aWxlLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQg
Q29kZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoKICAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOwogICAgICAg
ICAgICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKICAg
ICAgICAgICAgICAgICB0eXBlID0gREZHSklUOwotICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJs
b2NrLT5jYW5Db21waWxlV2l0aERGR1N0YXRlKCkgPT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERG
R0ZhbHNlKQorICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERG
R1N0YXRlKCkgIT0gREZHOjpDYW5Db21waWxlKQogICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNl
bGluZU9ubHk7CiAgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkp
CiAgICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141611</attachid>
            <date>2012-05-13 13:30:15 -0700</date>
            <delta_ts>2012-05-13 17:02:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>foo_apply_bar_arguments_patch_4.diff</filename>
            <type>text/plain</type>
            <size>44321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2ODY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEyLTA1LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIGZvby5hcHBseShiYXIsIGFyZ3VtZW50cykK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MzA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
bmFibGVzIGNvbXBpbGF0aW9uIG9mIG9wX2puZXFfcHRyIGFuZCBzb21lIGZvcm1zIG9mIG9wX2Nh
bGxfdmFyYXJncy4KKyAgICAgICAgCisgICAgICAgIEFsc28gaW5jbHVkZXMgYSBidW5jaCBvZiBi
dWcgZml4ZXMgdGhhdCB3ZXJlIG1hZGUgbmVjZXNzYXJ5IGJ5IHRoZSBpbmNyZWFzZWQKKyAgICAg
ICAgcHJlc3N1cmUgb24gdGhlIENGRyBzaW1wbGlmaWVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBhIDEtMiUgd2luIG9uIFY4LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVC
bG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR1N0YXRlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoRXZh
bENvZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhUYWlsT3BlcmFuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OmdldExvY2FsTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKENTRVBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZGVidWdGYWlsKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGUpOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlT3Bjb2Rlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6OmNh
bkNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlRnVuY3Rpb25G
b3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHRHJpdmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAo
VmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OmNoZWNrT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhP
cCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6c2FtcGxlKToKKwogMjAxMi0wNS0xMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgYmUgYWJsZSB0
byBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgdXNlIGFyZ3VtZW50cyByZWZsZWN0aXZlbHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnBy
aW50Q2FsbE9wKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgZGF0YUxvZygiIGxsaW50KG5vdCBz
ZXQpIik7CiAjZW5kaWYKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBKU0Z1bmN0aW9uKiB0YXJn
ZXQgPSBnZXRDYWxsTGlua0luZm8obG9jYXRpb24pLmxhc3RTZWVuQ2FsbGVlLmdldCgpOwotICAg
ICAgICBpZiAodGFyZ2V0KQotICAgICAgICAgICAgZGF0YUxvZygiIGppdCglcCwgZXhlYyAlcCki
LCB0YXJnZXQsIHRhcmdldC0+ZXhlY3V0YWJsZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZGF0YUxvZygiIGppdChub3Qgc2V0KSIpOworICAgICAgICBpZiAobnVtYmVyT2ZDYWxsTGlu
a0luZm9zKCkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGdldENhbGxMaW5r
SW5mbyhsb2NhdGlvbikubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICBpZiAodGFy
Z2V0KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBqaXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0
LCB0YXJnZXQtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiIGppdChub3Qgc2V0KSIpOworICAgICAgICB9CiAjZW5kaWYKICAgICB9CiAg
ICAgZGF0YUxvZygiXG4iKTsKQEAgLTE1ODAsNyArMTU4Miw3IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KDApCiAgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZShDb21waWxlV2l0aERGR1Vuc2V0KQor
ICAgICwgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0
KQogI2VuZGlmCiB7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkp
OwpAQCAtMjQ0NywxNyArMjQ0OSwxNyBAQCBKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNv
bXBpbGVPcHRpCiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1ib29sIFByb2dyYW1Db2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQorREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3Jh
bUNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERG
Rzo6Y2FuQ29tcGlsZVByb2dyYW0odGhpcyk7CiB9CiAKLWJvb2wgRXZhbENvZGVCbG9jazo6Y2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBFdmFsQ29kZUJs
b2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpjYW5D
b21waWxlRXZhbCh0aGlzKTsKIH0KIAotYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FuQ29tcGls
ZVdpdGhERkdJbnRlcm5hbCgpCitERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9j
azo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1faXNDb25zdHJ1Y3Rv
cikKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KHRo
aXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsMjAgKzM5NiwxNCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9
IDA7CiAKLSAgICAgICAgZW51bSBDb21waWxlV2l0aERGR1N0YXRlIHsKLSAgICAgICAgICAgIENv
bXBpbGVXaXRoREZHRmFsc2UsCi0gICAgICAgICAgICBDb21waWxlV2l0aERGR1RydWUsCi0gICAg
ICAgICAgICBDb21waWxlV2l0aERGR1Vuc2V0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVh
bCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7Ci0gICAgICAgIGJvb2wgY2Fu
Q29tcGlsZVdpdGhERkcoKQorICAgICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKSA9IDA7CisgICAgICAgIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGVXaXRoREZHKCkKICAgICAgICAgewotICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7Ci0gICAgICAgICAgICBtX2NhbkNvbXBp
bGVXaXRoREZHU3RhdGUgPSByZXN1bHQgPyBDb21waWxlV2l0aERGR1RydWUgOiBDb21waWxlV2l0
aERGR0ZhbHNlOworICAgICAgICAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY2Fu
Q29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0aERG
R1N0YXRlID0gcmVzdWx0OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQot
ICAgICAgICBDb21waWxlV2l0aERGR1N0YXRlIGNhbkNvbXBpbGVXaXRoREZHU3RhdGUoKSB7IHJl
dHVybiBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7IH0KKyAgICAgICAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSgpIHsgcmV0dXJuIG1fY2FuQ29tcGlsZVdpdGhE
RkdTdGF0ZTsgfQogCiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogICAg
ICAgICB7CkBAIC0xMzE0LDcgKzEzMDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICBPd25QdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAg
ICAgQ29tcGlsZVdpdGhERkdTdGF0ZSBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7CisgICAgICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZTsKICNlbmRpZgog
ICAgIH07CiAKQEAgLTEzNTYsNyArMTM1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBib29sIGppdENvbXBpbGVJ
bXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKKyAg
ICAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGR0ludGVy
bmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkBAIC0xMzkxLDcgKzEzODUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERG
R0ludGVybmFsKCk7CisgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpAQCAtMTQyOSw3
ICsxNDIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNv
bigpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAg
ICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNlbmRpZgogICAg
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0MCw4ICsyMzQwLDUw
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0LCBD
b2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0cnVjdCk7
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA9PSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAv
LyBJdCB3b3VsZCBiZSBjb29sIHRvIGZ1bm5lbCB0aGlzIGludG8gaGFuZGxlQ2FsbCgpIHNvIHRo
YXQgaXQgY2FuIGhhbmRsZQorICAgICAgICAgICAgLy8gaW5saW5pbmcuIEJ1dCBjdXJyZW50bHkg
dGhhdCB3b24ndCBiZSBwcm9maXRhYmxlIGFueXdheSwgc2luY2Ugbm9uZSBvZiB0aGUKKyAgICAg
ICAgICAgIC8vIHVzZXMgb2YgY2FsbF92YXJhcmdzIHdpbGwgYmUgaW5saW5lYWJsZS4gU28gd2Ug
c2V0IHRoaXMgdXAgbWFudWFsbHkgYW5kCisgICAgICAgICAgICAvLyB3aXRob3V0IGlubGluZS9p
bnRyaW5zaWMgZGV0ZWN0aW9uLgorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnN0cnVjdGlv
biogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IFByZWRpY3ROb25lOworICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3Vs
dCkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgICAgICAgICAg
cHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdW5zaWduZWQgYXJnQ291bnQgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgICAgIGlmIChSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMp
CisgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOyAvLyBjYWxs
ZWUKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7IC8vIHRoaXMKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyArK2FyZ3VtZW50KQorICAgICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgaWYg
KGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9w
X2NhbGxfcHV0X3Jlc3VsdCkKKyAgICAgICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCBjYWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfY2FsbF9wdXRfcmVzdWx0OgogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRf
cmVzdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgorICAgICAg
ICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8g
bGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCisgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1l
ciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwor
ICAgICAgICAgICAgLy8gYWxyZWFkeSBnbmFybHkgZW5vdWdoIGFzIGl0IGlzLgorICAgICAgICAg
ICAgYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBDaGVja0Z1bmN0aW9uLCBPcEluZm8oY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUuanNDZWxsLmdldCgpKSwKKyAgICAgICAgICAgICAgICBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgYWRkVG9HcmFw
aChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfcHRy
KSkpOworICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwogCiAgICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZTogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
Z2V0UHJlZGljdGlvbigpOwpAQCAtMjQ2Myw4ICsyNTA1LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEFTU0VSVChjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKSk7CiAgICAgfQogfQogCkBAIC0yNDc3
LDYgKzI1MTcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAg
ICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwogICAgICAgICBwaGlT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIAorICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2st
PmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAogICAgICAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNz
b3JzOwogICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87CiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IG1fZ3JhcGhbZW50cnkubV9waGldLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwpAQCAtMjkwOSwxMiArMjk1Miw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKIAogICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgbV9n
cmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmNsZWFyKCk7Ci0gICAgfQogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGxvY2FsIHZhcmlhYmxlIHBoaXMuXG4iKTsKICNl
bmRpZgpAQCAtMjkyNiw2ICsyOTYzLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkK
ICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIGFyZ3VtZW50IHBoaXMuXG4iKTsKICNlbmRpZgogICAg
IHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOworCisgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVChibG9jayk7CisgICAgICAg
IGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KICAgICAKICAgICBmaXhWYXJpYWJsZUFjY2Vzc1By
ZWRpY3Rpb25zKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nl
c3NvcihibG9jaywgMCksIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJD
aGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMjU2LDEy
ICsyNTcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2Vd
OwogICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkp
CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBkYXRh
TG9nKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LlxuIiwgZWRnZS5pbmRleCgpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkgeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOworI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgTm9kZUluZGV4IG9yaWdpbmFsTm9k
ZUluZGV4ID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLmxvY2FsKCkpOwor
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgZGF0YUxv
ZygiICAgICAgICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1LlxuIiwgb3JpZ2luYWxOb2RlSW5k
ZXgpOworI2VuZGlmCiAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGVJbmRleCAhPSBOb05vZGUp
OwogICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSAmbV9ncmFwaFtvcmlnaW5hbE5vZGVJbmRl
eF07Ci0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAg
ICAgICBpZiAoY2hhbmdlUmVmKQorICAgICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CiAgICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6CiAgICAgICAgIC8vIFNl
dExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhp
bmcgdGhhdCBpcyBpbW1lZGlhdGVseQogICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBm
aXJzdCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgpAQCAtMjgxLDE1ICsyOTMsMjQgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkg
ewogICAgICAgICBjYXNlIFNldExvY2FsOiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCdzIGEgU2V0TG9j
YWwuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VJbmRleChlZGdlLCBv
cmlnaW5hbE5vZGUtPmNoaWxkMSgpLmluZGV4KCksIGNoYW5nZVJlZik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldExvY2FsOiB7CisjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
ICBJdCdzIGEgR2V0TG9jYWwuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VJbmRleChlZGdlLCBvcmlnaW5hbE5vZGVJbmRleCwgY2hhbmdlUmVmKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OiB7CisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICBJdCdzIFBoaS9TZXRBcmd1bWVudC5cbiIpOworI2Vu
ZGlmCiAgICAgICAgICAgICAvLyBLZWVwIHRoZSBHZXRMb2NhbCEKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC00MTcsMTIgKzQzOCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgTm9k
ZSYgc2Vjb25kTm9kZSA9IG1fZ3JhcGhbYXRTZWNvbmRUYWlsXTsKICAgICAgICAgCi0gICAgICAg
IGlmIChzZWNvbmROb2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoZSBzZWNvbmQgYmxvY2sgZGlkIHNvbWV0aGluZyB0byBhIHZhcmlhYmxl
IHRoYXQgaXMgY2FwdHVyZWQsIHNvIHJlZmxlY3QgdGhpcy4KLSAgICAgICAgICAgIGZpcnN0Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBzd2l0Y2ggKHNl
Y29uZE5vZGUub3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIEZs
dXNoOiB7CkBAIC00NDIsMTMgKzQ1NywzNSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUg
Zmlyc3QgYmxvY2ssIGFuZCBhZGp1c3QgdGhlIHN1YnN0aXR1dGlvbiB0byBhY2NvdW50IGZvcgot
ICAgICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCBzdWNjZXNzb3JzIHdpbGwgcmVmZXIgdG8gdGhl
IGNoaWxkIG9mIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOwotICAgICAgICAgICAg
c3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0KLSAgICAgICAgICAgICAgICBPcGVyYW5k
U3Vic3RpdHV0aW9uKAotICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxkMSgpLmlu
ZGV4KCksCi0gICAgICAgICAgICAgICAgICAgIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAgICAgICAgICAgLy8gSWYgaXQncyBh
IEdldExvY2FsIG9uIGEgY2FwdHVyZWQgdmFyLCB0aGVuIGRlZmluaXRlbHkga2VlcCB3aGF0IHdh
cworICAgICAgICAgICAgLy8gaW4gdGhlIHNlY29uZCBibG9jay4gSW4gcGFydGljdWxhciwgaXQn
cyBwb3NzaWJsZSB0aGF0IHRoZSBmaXJzdAorICAgICAgICAgICAgLy8gYmxvY2sgZG9lc24ndCBl
dmVuIGtub3cgYWJvdXQgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgICAgIGlmIChzZWNvbmROb2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICBm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IGF0U2Vjb25kVGFp
bDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzZWNvbmQgYmxvY2sgaGFkIGEg
R2V0TG9jYWwgYW5kIHRoZSBmaXJzdCBibG9jaworICAgICAgICAgICAgLy8gaGFkIGEgU2V0QXJn
dW1lbnQgb3IgYSBQaGkuIFRoZW4gdXBkYXRlIHRoZSB0YWlsLiBPdGhlcndpc2Uga2VlcCB3aGF0
IHdhcyBpbiB0aGUKKyAgICAgICAgICAgIC8vIGZpcnN0IGJsb2NrLgorICAgICAgICAgICAgTm9k
ZUluZGV4IGF0Rmlyc3RUYWlsID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICBBU1NFUlQoYXRGaXJzdFRhaWwgIT0gTm9Ob2RlKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV9ncmFwaFthdEZpcnN0VGFpbF0ub3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAg
ICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNv
bmRUYWlsOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIC8vIEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQg
YWRqdXN0IHRoZSBzdWJzdGl0dXRpb24gdG8gYWNjb3VudCBmb3IKKyAgICAgICAgICAgICAgICAv
LyB0aGUgZmFjdCB0aGF0IHN1Y2Nlc3NvcnMgd2lsbCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhl
IEdldExvY2FsLgorICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOworICAgICAgICAgICAgICAgIHN1YnN0
aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKSA9CisgICAgICAgICAgICAgICAgICAgIE9wZXJhbmRT
dWJzdGl0dXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxkMSgp
LmluZGV4KCksCisgICAgICAgICAgICAgICAgICAgICAgICBza2lwR2V0TG9jYWwoZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTQ5Niw3ICs1MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBzZWNvbmRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFBoYW50b20gJiYgISFub2RlLmNoaWxkMSgpKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7CisgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5l
cmF0ZSgpKTsKICAgICAgICAgICAgICAgICBOb2RlJiBwb3NzaWJsZUxvY2FsT3AgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldOwogICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AuaGFz
TG9jYWwoKSkgewpAQCAtNTA2LDYgKzU0NywyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBpZiAoc2V0TG9jYWwub3AoKSA9PSBTZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGbHVzaDogewor
ICAgICAgICAgICAgICAgIC8vIFRoZSBmbHVzaCBjb3VsZCB1c2UgYSBHZXRMb2NhbCwgU2V0TG9j
YWwsIFNldEFyZ3VtZW50LCBvciBhIFBoaS4KKyAgICAgICAgICAgICAgICAvLyBJZiBpdCB1c2Vz
IGEgR2V0TG9jYWwsIGl0J2xsIGJlIHRha2VuIGNhcmUgb2YgYmVsb3cuIElmIGl0IHVzZXMgYQor
ICAgICAgICAgICAgICAgIC8vIFNldExvY2FsIG9yIFNldEFyZ3VtZW50LCB0aGVuIGl0IG11c3Qg
YmUgdXNpbmcgYSBub2RlIGZyb20gdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSBibG9jay4g
QnV0IGlmIGl0IHVzZXMgYSBQaGksIHRoZW4gd2Ugc2hvdWxkIHJlZGlyZWN0IGl0IHRvCisgICAg
ICAgICAgICAgICAgLy8gdXNlIHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBhZHZlcnRpc2VkIGFz
IGEgdGFpbCBvcGVyYW5kLgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQx
KCldLm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggYXRGaXJzdEluZGV4ID0gZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgRWRnZShhdEZpcnN0
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0g
bm9kZS5zaG91bGRHZW5lcmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNiArNDQxLDMxIEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAgIE5vZGVJ
bmRleCBnZXRMb2NhbExvYWRFbGltaW5hdGlvbihWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFy
aWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEo
KS5pbmRleCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgIH0KKyAgICAKICAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oRWRnZSYg
Y2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRo
aXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCkBAIC00NjIsMTUgKzQ4NywxNSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgc2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50KQorICAgIGJvb2wgc2V0
UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50KQogICAgIHsKICAgICAgICAgaWYgKHJl
cGxhY2VtZW50ID09IE5vTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIC8vIEJlIHNhZmUuIERvbid0IHRyeSB0byBw
ZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0aGUgcHJlZGljdGlvbnMgZG9uJ3QKICAgICAgICAgLy8g
YWdyZWUuCiAgICAgICAgIGlmIChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkg
IT0gbV9ncmFwaFtyZXBsYWNlbWVudF0ucHJlZGljdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgIFJlcGxhY2luZyBA
JXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKQEAgLTQ4Miw2ICs1MDcs
OCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxs
IGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUuCiAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzW21fY29tcGlsZUluZGV4XSA9IHJlcGxhY2VtZW50OworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIAogICAgIHZvaWQgZWxpbWluYXRlKCkKQEAgLTU2OSw2
ICs1OTYsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uo
bm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBH
ZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIE5vZGVJbmRleCBwb3NzaWJsZVJlcGxhY2VtZW50ID0gZ2V0TG9jYWxMb2FkRWxp
bWluYXRpb24odmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgIGlmICghc2V0UmVwbGFj
ZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBOb2RlSW5kZXggb2xkVGFpbEluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKAorICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSk7CisgICAgICAgICAgICBpZiAob2xkVGFpbEluZGV4ID09IG1fY29tcGlsZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQorICAgICAgICAgICAgICAgICAgICBwb3Nz
aWJsZVJlcGxhY2VtZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBuZWNlc3NhcnkuIFNvbWUgcGhhc2VzIHdpbGwgY29u
dmVydCBub2RlcyB0byBjb25zdGFudHMsCiAgICAgICAgICAgICAvLyB3aGljaCBtYXkgcmVzdWx0
IGluIGR1cGxpY2F0ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NFIHRvIGNsZWFuIHRoaXMgdXAuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDMzICszNCw1NiBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotc3RhdGljIGlubGlu
ZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQp
CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsb2NrLCBPcGNv
ZGVJRCBvcGNvZGVJRCwgYm9vbCByZXN1bHQpCiB7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
ICFyZXN1bHQpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJD
YW5ub3QgaGFuZGxlIGNvZGUgYmxvY2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMuXG4iLCBjb2Rl
QmxvY2ssIG9wY29kZU5hbWVzW29wY29kZUlEXSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShj
b2RlQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShvcGNvZGVJRCk7CisgICAgVU5VU0VEX1BBUkFN
KHJlc3VsdCk7CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8Ym9vbCAoKmNhbkhhbmRsZU9wY29kZSko
T3Bjb2RlSUQpPgotYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQor
c3RhdGljIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3Bjb2Rl
SUQgb3Bjb2RlSUQsIENhcGFiaWxpdHlMZXZlbCByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3Vs
dCAhPSBDYW5Db21waWxlKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgaWYg
KHJlc3VsdCA9PSBDYW5ub3RDb21waWxlKQorICAgICAgICBkYXRhTG9nKCJDYW5ub3QgaGFuZGxl
IGNvZGUgYmxvY2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMuXG4iLCBjb2RlQmxvY2ssIG9wY29k
ZU5hbWVzW29wY29kZUlEXSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U2hvdWxkUHJvZmlsZSk7CisgICAgICAgIGRhdGFMb2coIkNhbm5vdCBjb21waWxlIGNvZGUgYmxv
Y2sgJXAgYmVjYXVzZSBvZiBvcGNvZGUgJXMsIGJ1dCBpbmxpbmluZyBtaWdodCBiZSBwb3NzaWJs
ZS5cbiIsIGNvZGVCbG9jaywgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdKTsKKyAgICB9CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShvcGNvZGVJRCk7
CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgUmV0dXJuVHlwZSwgUmV0dXJuVHlwZSAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQsIENv
ZGVCbG9jayosIEluc3RydWN0aW9uKik+CitSZXR1cm5UeXBlIGNhbkhhbmRsZU9wY29kZXMoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVyblR5cGUgaW5pdGlhbFZhbHVlKQogewogICAgIEludGVy
cHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRl
cjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIFJldHVyblR5cGUgcmVzdWx0ID0gaW5p
dGlhbFZhbHVlOwogICAgIAogICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOyBi
eXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9uQ291bnQ7ICkgewogICAgICAgICBzd2l0Y2ggKGlu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0u
dS5vcGNvZGUpKSB7Ci0jZGVmaW5lIERFRklORV9PUChvcGNvZGUsIGxlbmd0aCkgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGNhc2Ugb3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICBpZiAoIWNhbkhhbmRsZU9wY29kZShvcGNvZGUpKSB7ICAgICBcCi0gICAg
ICAgICAgICAgICAgZGVidWdGYWlsKGNvZGVCbG9jaywgb3Bjb2RlKTsgICBcCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBieXRlY29kZU9m
ZnNldCArPSBsZW5ndGg7ICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsKKyNkZWZpbmUg
REVGSU5FX09QKG9wY29kZSwgbGVuZ3RoKSBcCisgICAgICAgIGNhc2Ugb3Bjb2RlOiB7IFwKKyAg
ICAgICAgICAgIFJldHVyblR5cGUgY3VycmVudCA9IGNhbkhhbmRsZU9wY29kZSggXAorICAgICAg
ICAgICAgICAgIG9wY29kZSwgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2Rl
T2Zmc2V0KTsgXAorICAgICAgICAgICAgaWYgKGN1cnJlbnQgPCByZXN1bHQpIHsgXAorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7IFwKKyAgICAgICAgICAgICAgICBkZWJ1Z0ZhaWwo
Y29kZUJsb2NrLCBvcGNvZGUsIGN1cnJlbnQpOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAg
ICAgIGJ5dGVjb2RlT2Zmc2V0ICs9IGxlbmd0aDsgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAg
ICAgICAgfQogICAgICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX0lEKERFRklORV9PUCkKICN1bmRl
ZiBERUZJTkVfT1AKICAgICAgICAgZGVmYXVsdDoKQEAgLTY5LDE5ICs5MiwxOSBAQCBib29sIGNh
bkhhbmRsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBjYW5Db21w
aWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoIU1hY3JvQXNzZW1i
bGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbkNvbXBpbGVPcGNvZGU+KGNvZGVCbG9jayk7Cisg
ICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVz
PENhcGFiaWxpdHlMZXZlbCwgY2FuQ29tcGlsZU9wY29kZT4oY29kZUJsb2NrLCBDYW5Db21waWxl
KTsKIH0KIAogYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQogewot
ICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbklubGluZU9wY29kZT4oY29kZUJsb2NrKTsK
KyAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2Rlczxib29sLCBjYW5JbmxpbmVPcGNvZGU+KGNvZGVC
bG9jaywgdHJ1ZSk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIERGR0NhcGFiaWxpdGllc19oCiAKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIK
KyNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKQEAgLTY3LDcgKzY4LDcgQEAgaW5s
aW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cgogfQogCiAvLyBPcGNvZGUgY2hl
Y2tpbmcuCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQor
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlE
LCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiopCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewog
ICAgIGNhc2Ugb3BfZW50ZXI6CkBAIC0xNzAsMTQgKzE3MSwxOCBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAgICAg
Y2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19s
ZW5ndGg6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAg
ICAgIHJldHVybiBDYW5Db21waWxlOwogICAgICAgICAKKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKKyAgICAgICAgcmV0dXJuIFNob3VsZFByb2ZpbGU7CisKICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIH0KIH0K
IAotaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQoraW5saW5l
IGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgSW5zdHJ1Y3Rpb24qIHBjKQogewogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAg
ICAgCkBAIC0xOTUsNyArMjAwLDYgQEAgaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29k
ZUlEIG9wYwogICAgICAgICAKICAgICAvLyBJbmxpbmluZyBkb2Vzbid0IGNvcnJlY3RseSByZW1h
cCByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmFuZHMuCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQg
aW5saW5pbmcgY29kZSB0aGF0IGNyZWF0ZXMgYWN0aXZhdGlvbnMgb3IgaGFzIG5lc3RlZCBmdW5j
dGlvbnMuCiAgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKQEAgLTIwNCwxMiArMjA4LDE3
IEBAIGlubGluZSBib29sIGNhbklubGluZU9wY29kZShPcGNvZGVJRCBvcGMKICAgICBjYXNlIG9w
X25ld19mdW5jX2V4cDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKKyAgICAvLyBJ
bmxpbmluZyBzdXBwb3J0cyBvcF9jYWxsX3ZhcmFyZ3MgaWYgaXQncyBhIGNhbGwgdGhhdCBqdXN0
IGZvcndhcmRzIHRoZSBjYWxsZXIncworICAgIC8vIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczoKKyAgICAgICAgcmV0dXJuIHBjWzNdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCk7CisgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKTsKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBp
bGVPcGNvZGUob3Bjb2RlSUQsIGNvZGVCbG9jaywgcGMpID09IENhbkNvbXBpbGU7CiAgICAgfQog
fQogCi1ib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOworQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOwogYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENv
ZGVCbG9jayopOwogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBpbmxpbmUgYm9vbCBtaWdodENv
bXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yMTksMzAgKzIyOCw0
MiBAQCBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0CiBpbmxpbmUgYm9v
bCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsg
fQogaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sq
KSB7IHJldHVybiBmYWxzZTsgfQogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29k
ZUlEKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29k
ZUlEKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29k
ZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZU9wY29kZShPcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKSB7IHJldHVybiBm
YWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlELCBDb2RlQmxvY2sq
LCBJbnN0cnVjdGlvbiopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUg
Ym9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLWlubGluZSBib29sIGNhbkNvbXBpbGVFdmFsKENvZGVC
bG9jayogY29kZUJsb2NrKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlRXZhbChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gbWlnaHRDb21waWxlRXZhbChjb2Rl
QmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CisgICAgaWYgKCFtaWdodENv
bXBpbGVFdmFsKGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAg
IAorICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCi1pbmxpbmUg
Ym9vbCBjYW5Db21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgcmV0dXJuIG1pZ2h0Q29tcGlsZVByb2dyYW0oY29kZUJsb2NrKSAmJiBjYW5Db21waWxlT3Bj
b2Rlcyhjb2RlQmxvY2spOworICAgIGlmICghbWlnaHRDb21waWxlUHJvZ3JhbShjb2RlQmxvY2sp
KQorICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1cm4gY2FuQ29t
cGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZUZ1bmN0
aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBy
ZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuQ29tcGls
ZU9wY29kZXMoY29kZUJsb2NrKTsKKyAgICBpZiAoIW1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2Fs
bChjb2RlQmxvY2spKQorICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICBy
ZXR1cm4gY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAotaW5saW5lIGJvb2wgY2Fu
Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoraW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KGNvZGVCbG9jaykgJiYgY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKKyAgICBpZiAo
IW1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykpCisgICAgICAgIHJl
dHVybiBDYW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2Rlcyhj
b2RlQmxvY2spOwogfQogCiBpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBlbnVtIFNwaWxsUmVnaXN0
ZXJzTW9kZSB7IE5lZWRUb1NwaWxsLCBECiAKIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9
OwogCitlbnVtIENhcGFiaWxpdHlMZXZlbCB7IENhbm5vdENvbXBpbGUsIFNob3VsZFByb2ZpbGUs
IENhbkNvbXBpbGUsIENhcGFiaWxpdHlMZXZlbE5vdFNldCB9OworCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENv
ZGU6OkJhc2VsaW5lSklUKTsKLQorICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
ICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRh
YmxlICVwLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkNvdW50KCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksOCBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgICAgICBkYXRh
TG9nKCIlc0AldSVzIiwKICAgICAgICAgICAgICAgICAgICAgdXNlS2luZFRvU3RyaW5nKG1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLnVzZUtpbmQoKSksCiAgICAgICAgICAgICAgICAgICAgIG1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCksCi0gICAgICAgICAgICAgICAgICAgIHBy
ZWRpY3Rpb25Ub0FiYnJldmlhdGVkU3RyaW5nKGF0KGNoaWxkSWR4KS5wcmVkaWN0aW9uKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvblRvQWJicmV2aWF0ZWRTdHJpbmcoCisgICAg
ICAgICAgICAgICAgICAgICAgICBhdChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkucHJlZGlj
dGlvbigpKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoISFub2RlLmNo
aWxkMSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0NSw3
ICs5NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlKQogewogICAgIFBfREZHT3BlcmF0
aW9uX0Ugc2xvd0NhbGxGdW5jdGlvbjsKLQorICAgIAogICAgIGlmIChub2RlLm9wKCkgPT0gQ2Fs
bCkKICAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOwogICAgIGVs
c2UgewpAQCAtOTY0LDggKzk2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUmIG5vZGUKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwogICAgIHVzZShj
YWxsZWVFZGdlKTsKICAgICAKLSAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNo
aWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKLSAgICAvLyBy
ZWNlaXZlciAobWV0aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1l
bnRzLgorICAgIC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgdGhlIGZ1
bmN0aW9uOyB0aGUgc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlCisgICAgLy8gYXJndW1lbnRz
LgogICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsKICAgICAK
ICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2Vk
QXJncyArIGR1bW15VGhpc0FyZ3VtZW50KSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QoUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgcHVi
bGljOgogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCisgICAgI2RlZmluZSBub3RTZXQg
KHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorCiAgICAgdm9pZCB2YWxpZGF0ZSgpCiAgICAgewog
ICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSwg
c2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgpAQCAtMjAyLDYgKzIwNCwyMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAg
ICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAorICAgICAgICAgICAg
ICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgICAg
ICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKKyAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGdldExv
Y2FsUG9zaXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OworICAgICAgICAgICAgICAgIHNldExv
Y2FsUG9zaXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmxv
Y2FsKGkpID0gbm90U2V0OworICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmxvY2Fs
KGkpID0gbm90U2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTIxMyw2ICsyMzEsMzcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdldChub2Rl
SW5kZXgpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0luZGV4
KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2NhbCgp
KSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBt
YXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCisgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ug
b2YgZmx1c2hpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9k
ZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2tJbmRleCwgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBhcmd1bWVu
dFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBibG9j
a0luZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjIxLDYgKzI3MCwyNCBAQCBwcml2YXRlOgog
ICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOwog
ICAgIAorICAgIHZvaWQgY2hlY2tPcGVyYW5kKAorICAgICAgICBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAorICAgICAgICBPcGVyYW5k
czxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCisgICAgeworICAgICAg
ICBpZiAoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpID09IG5vdFNldCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgKGJsb2NrLT5hdChnZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpKSwKKyAgICAgICAgICAgICBibG9jay0+YXQo
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSksCisgICAgICAgICAgICAgYmxvY2tJ
bmRleCksCisgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpIDwg
c2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQorICAgIAogICAgIHZv
aWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAg
ICAgICAgIGRhdGFMb2coIkAldSIsIG5vZGVJbmRleCk7CkBAIC0yNTYsNiArMzIzLDEyIEBAIHBy
aXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCisg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUgYW5kIEAldSBpbiBC
bG9jayAjJXUiLCBub2RlSW5kZXgsIG5vZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAogICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3RlZE5vZGVJ
bmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewogICAgICAgICBkYXRhTG9nKCJAJXUgaW4g
QmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRleCwgYmxvY2tJ
bmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBK
SVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiAjaWYgRU5BQkxFKERGR19K
SVQpCiB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNrS2lu
ZCBraW5kKQogewotICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgIGlmICghY2Fu
QmVPcHRpbWl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEp1bXAgc2tpcE9wdGlt
aXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1p
emF0aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCA6
IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4pLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKQEAgLTQx
OCw3ICs0MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSog
cmFyZUNhc2VQcm9maWxlID0gMDsKLSAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAg
ICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByYXJlQ2FzZVByb2Zp
bGUgPSBtX2NvZGVCbG9jay0+YWRkUmFyZUNhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpOwog
I2VuZGlmCiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gKGl0ZXIgLSAx
KS0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAg
ICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAgICAgaWYgKG1fY2FuQmVP
cHRpbWl6ZWQpCisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9maWxl
LT5tX2NvdW50ZXIpKTsKICNlbmRpZgogCkBAIC01NjYsNyArNTY2LDI0IEBAIEpJVENvZGUgSklU
Ojpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKLSAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2RlQmxvY2stPmNhbkNv
bXBpbGVXaXRoREZHKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVC
bG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBzd2l0Y2ggKGxldmVsKSB7CisgICAgY2Fz
ZSBERkc6OkNhbm5vdENvbXBpbGU6CisgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsK
KyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgREZHOjpTaG91bGRQcm9maWxlOgorICAgICAgICBtX2NhbkJlT3B0aW1pemVkID0g
ZmFsc2U7CisgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgorICAgICAgICBtX2NhbkJlT3B0aW1pemVk
ID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICNlbmRpZgogCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0bGUgYml0
IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTYyMCw3ICs2MzcsNyBAQCBKSVRDb2Rl
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgTGFiZWwgZnVuY3Rpb25Cb2R5
ID0gbGFiZWwoKTsKICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgaWYgKG1f
Y2FuQmVPcHRpbWl6ZWQpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCiAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRp
b25FbnRyeUNvdW50KSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MzcsNyArODM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1fY2Fu
QmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyByZXR1
cm4gbV9jYW5CZU9wdGltaXplZDsgfQorICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmco
KSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJvb2wg
Y2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVzIHVz
ZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2ZmLApA
QCAtODg2LDYgKzg4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CisgICAgICAgIGJvb2wgbV9z
aG91bGRFbWl0UHJvZmlsaW5nOwogI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJl
dmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw3ICs4MTgsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgCiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChvcGNv
ZGVJRCA9PSBvcF9tdWwpOwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAgICAgaWYg
KG1fY2FuQmVPcHRpbWl6ZWQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaWYgdGhpcyBp
cyB0YWtpbmcgdGhlIHNsb3cgY2FzZSBqdXN0CiAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIG5l
Z2F0aXZlIHplcm8uIElmIHRoaXMgcHJvZHVjZXMgcG9zaXRpdmUgemVybywgdGhlbiB3ZQogICAg
ICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGUgc2xvdyBjYXNlIHRvIGJlIHRha2VuIGJlY2F1c2Ug
dGhhdCB3aWxsIHRocm93IG9mZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlJZFRyYW5zaXRpbwogICAgIC8vIElmIHdlIHN1Y2NlZWQgaW4gYWxsIG9mIG91ciBjaGVja3Ms
IGFuZCB0aGUgY29kZSB3YXMgb3B0aW1pemFibGUsIHRoZW4gbWFrZSBzdXJlIHdlCiAgICAgLy8g
ZGVjcmVtZW50IHRoZSByYXJlIGNhc2UgY291bnRlci4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpKSB7CisgICAgaWYg
KG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpID49IERGRzo6U2hvdWxkUHJvZmlsZSkg
ewogICAgICAgICBzdWIzMigKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSwKICAgICAgICAg
ICAgIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+bV9jb3VudGVyKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgLy8gSWYgd2Ugc3VjY2VlZCBpbiBhbGwg
b2Ygb3VyIGNoZWNrcywgYW5kIHRoZSBjb2RlIHdhcyBvcHRpbWl6YWJsZSwgdGhlbiBtYWtlIHN1
cmUgd2UKICAgICAvLyBkZWNyZW1lbnQgdGhlIHJhcmUgY2FzZSBjb3VudGVyLgogI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKLSAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZH
KCkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCkgPj0gREZHOjpT
aG91bGRQcm9maWxlKSB7CiAgICAgICAgIHN1YjMyKAogICAgICAgICAgICAgVHJ1c3RlZEltbTMy
KDEpLAogICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+cmFyZUNhc2VQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5tX2NvdW50
ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNw
cAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQ
cm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQ29kZVBy
b2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoKICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOwogICAgICAgICAgICAg
aWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKICAgICAgICAg
ICAgICAgICB0eXBlID0gREZHSklUOwotICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5j
YW5Db21waWxlV2l0aERGR1N0YXRlKCkgPT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERGR0ZhbHNl
KQorICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGR1N0YXRl
KCkgIT0gREZHOjpDYW5Db21waWxlKQogICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9u
bHk7CiAgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCiAgICAg
ICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141619</attachid>
            <date>2012-05-13 17:02:40 -0700</date>
            <delta_ts>2012-05-13 18:23:44 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>foo_apply_bar_arguments_patch_5.diff</filename>
            <type>text/plain</type>
            <size>48200</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2OTA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDEyLTA1LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIGZvby5hcHBseShiYXIsIGFyZ3VtZW50cykK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MzA2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
bmFibGVzIGNvbXBpbGF0aW9uIG9mIG9wX2puZXFfcHRyIGFuZCBzb21lIGZvcm1zIG9mIG9wX2Nh
bGxfdmFyYXJncy4KKyAgICAgICAgCisgICAgICAgIEFsc28gaW5jbHVkZXMgYSBidW5jaCBvZiBi
dWcgZml4ZXMgdGhhdCB3ZXJlIG1hZGUgbmVjZXNzYXJ5IGJ5IHRoZSBpbmNyZWFzZWQKKyAgICAg
ICAgcHJlc3N1cmUgb24gdGhlIENGRyBzaW1wbGlmaWVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBhIDEtMiUgd2luIG9uIFY4LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVC
bG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmNhbkNvbXBpbGVXaXRoREZHKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYW5Db21waWxl
V2l0aERGR1N0YXRlKToKKyAgICAgICAgKFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoRXZh
bENvZGVCbG9jayk6CisgICAgICAgIChGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6Zml4UG9z
c2libGVHZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFz
ZTo6Zml4VGFpbE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9u
UGhhc2U6Om1lcmdlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRFbGltaW5hdGlvbik6CisgICAg
ICAgIChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNldFJlcGxhY2Vt
ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAg
ICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRlYnVn
RmFpbCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkhhbmRsZU9wY29k
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVPcGNvZGVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FuSW5saW5lT3Bjb2RlKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVFdmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6
CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKFZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpj
aGVja09wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjpyZXBvcnRWYWxpZGF0
aW9uQ29udGV4dCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAg
ICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3ApOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlk
VHJhbnNpdGlvbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6
OnNhbXBsZSk6CisKIDIwMTItMDUtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBERkcgc2hvdWxkIGJlIGFibGUgdG8gaW5saW5lIGZ1bmN0aW9ucyB0aGF0IHVz
ZSBhcmd1bWVudHMgcmVmbGVjdGl2ZWx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nywx
MSArMzg3LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChFeGVjU3RhdGUqIGUKICAg
ICAgICAgICAgIGRhdGFMb2coIiBsbGludChub3Qgc2V0KSIpOwogI2VuZGlmCiAjaWYgRU5BQkxF
KEpJVCkKLSAgICAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gZ2V0Q2FsbExpbmtJbmZvKGxvY2F0
aW9uKS5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKLSAgICAgICAgaWYgKHRhcmdldCkKLSAgICAgICAg
ICAgIGRhdGFMb2coIiBqaXQoJXAsIGV4ZWMgJXApIiwgdGFyZ2V0LCB0YXJnZXQtPmV4ZWN1dGFi
bGUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGFMb2coIiBqaXQobm90IHNldCki
KTsKKyAgICAgICAgaWYgKG51bWJlck9mQ2FsbExpbmtJbmZvcygpKSB7CisgICAgICAgICAgICBK
U0Z1bmN0aW9uKiB0YXJnZXQgPSBnZXRDYWxsTGlua0luZm8obG9jYXRpb24pLmxhc3RTZWVuQ2Fs
bGVlLmdldCgpOworICAgICAgICAgICAgaWYgKHRhcmdldCkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgaml0KCVwLCBleGVjICVwKSIsIHRhcmdldCwgdGFyZ2V0LT5leGVjdXRhYmxlKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBqaXQobm90IHNldCki
KTsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgfQogICAgIGRhdGFMb2coIlxuIik7CkBAIC0xNTgw
LDcgKzE1ODIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAg
ICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigwKQogI2lmIEVOQUJMRShKSVQpCi0gICAgLCBtX2NhbkNvbXBpbGVXaXRo
REZHU3RhdGUoQ29tcGlsZVdpdGhERkdVbnNldCkKKyAgICAsIG1fY2FuQ29tcGlsZVdpdGhERkdT
dGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgogewogICAgIHNldE51bVBh
cmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKQEAgLTI0NDcsMTcgKzI0NDksMTcgQEAg
SlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aQogICAgIHJldHVybiBlcnJv
cjsKIH0KIAotYm9vbCBQcm9ncmFtQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGR0ludGVybmFs
KCkKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRo
REZHSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVQcm9ncmFtKHRoaXMp
OwogfQogCi1ib29sIEV2YWxDb2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQor
REZHOjpDYXBhYmlsaXR5TGV2ZWwgRXZhbENvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERkdJbnRl
cm5hbCgpCiB7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUV2YWwodGhpcyk7CiB9CiAKLWJv
b2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKQorREZHOjpD
YXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNvbXBpbGVXaXRoREZHSW50ZXJu
YWwoKQogewogICAgIGlmIChtX2lzQ29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBERkc6OmNh
bkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
Mzk2LDIwICszOTYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgdmly
dHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwogCi0gICAgICAgIGVudW0gQ29tcGls
ZVdpdGhERkdTdGF0ZSB7Ci0gICAgICAgICAgICBDb21waWxlV2l0aERGR0ZhbHNlLAotICAgICAg
ICAgICAgQ29tcGlsZVdpdGhERkdUcnVlLAotICAgICAgICAgICAgQ29tcGlsZVdpdGhERkdVbnNl
dAotICAgICAgICB9OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGR0lu
dGVybmFsKCkgPSAwOwotICAgICAgICBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkKKyAgICAgICAg
dmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGR0ludGVybmFsKCkg
PSAwOworICAgICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlV2l0aERGRygpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gY2FuQ29tcGlsZVdpdGhERkdJbnRl
cm5hbCgpOwotICAgICAgICAgICAgbV9jYW5Db21waWxlV2l0aERGR1N0YXRlID0gcmVzdWx0ID8g
Q29tcGlsZVdpdGhERkdUcnVlIDogQ29tcGlsZVdpdGhERkdGYWxzZTsKKyAgICAgICAgICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsK
KyAgICAgICAgICAgIG1fY2FuQ29tcGlsZVdpdGhERkdTdGF0ZSA9IHJlc3VsdDsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgQ29tcGlsZVdpdGhERkdTdGF0
ZSBjYW5Db21waWxlV2l0aERGR1N0YXRlKCkgeyByZXR1cm4gbV9jYW5Db21waWxlV2l0aERGR1N0
YXRlOyB9CisgICAgICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVXaXRoREZHU3Rh
dGUoKSB7IHJldHVybiBtX2NhbkNvbXBpbGVXaXRoREZHU3RhdGU7IH0KIAogICAgICAgICBib29s
IGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKICAgICAgICAgewpAQCAtMTMxNCw3ICsxMzA4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgT3duUHRyPFJhcmVEYXRhPiBtX3Jh
cmVEYXRhOwogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIENvbXBpbGVXaXRoREZHU3RhdGUgbV9j
YW5Db21waWxlV2l0aERGR1N0YXRlOworICAgICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBtX2Nh
bkNvbXBpbGVXaXRoREZHU3RhdGU7CiAjZW5kaWYKICAgICB9OwogCkBAIC0xMzU2LDcgKzEzNTAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKCk7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBj
YW5Db21waWxlV2l0aERGR0ludGVybmFsKCk7CisgICAgICAgIHZpcnR1YWwgREZHOjpDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOwogI2VuZGlmCiAgICAgfTsKIApA
QCAtMTM5MSw3ICsxMzg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaml0Q29tcGlsZUltcGwoRXhlY1N0
YXRlKik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkdJbnRlcm5hbCgpOworICAgICAgICB2aXJ0
dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVXaXRoREZHSW50ZXJuYWwoKTsKICNl
bmRpZgogCiAgICAgcHJpdmF0ZToKQEAgLTE0MjksNyArMTQyMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAgICAgICAgdmlydHVhbCBib29s
IGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayog
cmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHSW50
ZXJuYWwoKTsKKyAgICAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
V2l0aERGR0ludGVybmFsKCk7CiAjZW5kaWYKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDExNjg1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNjksNiArMTA2OSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgCiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAg
ICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6CisgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0
ZWQ6CiAgICAgICAgIC8vIERvZXMgbm90aGluZyB0aGF0IGlzIHVzZXItdmlzaWJsZS4KICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzQwLDggKzIzNDAsNTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgaGFuZGxlQ2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9u
LCBDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czogeworICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
ID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGNvb2wgdG8gZnVubmVsIHRoaXMgaW50byBoYW5k
bGVDYWxsKCkgc28gdGhhdCBpdCBjYW4gaGFuZGxlCisgICAgICAgICAgICAvLyBpbmxpbmluZy4g
QnV0IGN1cnJlbnRseSB0aGF0IHdvbid0IGJlIHByb2ZpdGFibGUgYW55d2F5LCBzaW5jZSBub25l
IG9mIHRoZQorICAgICAgICAgICAgLy8gdXNlcyBvZiBjYWxsX3ZhcmFyZ3Mgd2lsbCBiZSBpbmxp
bmVhYmxlLiBTbyB3ZSBzZXQgdGhpcyB1cCBtYW51YWxseSBhbmQKKyAgICAgICAgICAgIC8vIHdp
dGhvdXQgaW5saW5lL2ludHJpbnNpYyBkZXRlY3Rpb24uCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9Q
Q09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gUHJlZGljdE5vbmU7CisgICAgICAgICAgICBpZiAo
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3Bf
Y2FsbF9wdXRfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UHJvZmlsaW5nSW5k
ZXggPSBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKTsKKyAg
ICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRzTm90
Q3JlYXRlZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7Cisg
ICAgICAgICAgICBpZiAoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgYXJnQ291
bnQgPiBtX3BhcmFtZXRlclNsb3RzKQorICAgICAgICAgICAgICAgIG1fcGFyYW1ldGVyU2xvdHMg
PSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKTsgLy8gY2FsbGVlCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOyAvLyB0aGlzCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMTsgYXJndW1lbnQgPCBhcmdDb3VudDsgKythcmd1bWVu
dCkKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYXJndW1lbnRUb09wZXJhbmQo
YXJndW1lbnQpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsID0g
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pKTsKKyAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpCisgICAgICAgICAgICAgICAg
c2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDoKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBvcF9qbmVxX3B0cjoKKyAgICAgICAgICAgIC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRlIGZvciBu
b3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUtb25seSBqbmVxX3B0cgorICAgICAg
ICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUgYmVmb3JlIG1ha2luZyBpdCBtb3Jl
IGdlbmVyYWwsIHNpbmNlIGl0J3MKKyAgICAgICAgICAgIC8vIGFscmVhZHkgZ25hcmx5IGVub3Vn
aCBhcyBpdCBpcy4KKyAgICAgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgQ2hl
Y2tGdW5jdGlvbiwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5nZXQoKSks
CisgICAgICAgICAgICAgICAgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsK
KyAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BD
T0RFX0xFTkdUSChvcF9qbmVxX3B0cikpKTsKKyAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pu
ZXFfcHRyKTsKIAogICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKICAgICAgICAgICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKQEAgLTI0NjMsOCArMjUwNyw2
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJRCkp
OwogICAgIH0KIH0KIApAQCAtMjQ3Nyw2ICsyNTE5LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgUGhpU3RhY2tFbnRyeSBlbnRyeSA9IHBoaVN0YWNr
Lmxhc3QoKTsKICAgICAgICAgcGhpU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAKKyAgICAg
ICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBlbnRy
eS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKICAgICAgICAgdW5zaWduZWQgdmFyTm8gPSBlbnRy
eS5tX3Zhck5vOwogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQaGkgPSBtX2dy
YXBoW2VudHJ5Lm1fcGhpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKQEAgLTI5MDksMTIgKzI5NTQs
NiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAKICAgICBsaW5rQmxvY2tzKGlubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2NrcywgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlu
a2luZ1RhcmdldHMpOwogICAgIG1fZ3JhcGguZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7Ci0gICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9j
ayk7Ci0gICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwotICAgIH0KICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBsb2NhbCB2
YXJpYWJsZSBwaGlzLlxuIik7CiAjZW5kaWYKQEAgLTI5MjYsNiArMjk2NSwxMyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgZGF0YUxvZygiUHJvY2Vzc2luZyBhcmd1bWVudCBw
aGlzLlxuIik7CiAjZW5kaWYKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlTdGFjaz4o
KTsKKworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBB
U1NFUlQoYmxvY2spOworICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKKyAgICB9CiAgICAgCiAg
ICAgZml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9ucygpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxv
Y2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKQEAgLTI1NiwxMiArMjU3LDIzIEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUm
IGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKICAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9j
YWwpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChjaGlsZC52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+aXNDYXB0dXJlZCgpKQorI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKKyAgICAgICAgZGF0YUxvZygiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAl
dS5cbiIsIGVkZ2UuaW5kZXgoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNoaWxkLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEl0J3MgY2FwdHVy
ZWQuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAg
IE5vZGVJbmRleCBvcmlnaW5hbE5vZGVJbmRleCA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChjaGlsZC5sb2NhbCgpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgIGRhdGFMb2coIiAgICAgICAgRGVhbGluZyB3aXRoIG9yaWdpbmFsIEAl
dS5cbiIsIG9yaWdpbmFsTm9kZUluZGV4KTsKKyNlbmRpZgogICAgICAgICBBU1NFUlQob3JpZ2lu
YWxOb2RlSW5kZXggIT0gTm9Ob2RlKTsKICAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gJm1f
Z3JhcGhbb3JpZ2luYWxOb2RlSW5kZXhdOwotICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgaWYgKGNoYW5nZVJlZikKKyAgICAgICAgICAgIEFT
U0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAvLyBQb3NzaWJp
bGl0aWVzOgogICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGlu
ZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKICAgICAgICAgLy8g
ICAgIGF2YWlsYWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5vZGVJbmRleC4K
QEAgLTI4MSwxNSArMjkzLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNo
IChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgSXQncyBhIFNldExvY2FsLlxuIik7CisjZW5kaWYKICAgICAgICAgICAgIG1fZ3Jh
cGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5pbmRleCgpLCBjaGFu
Z2VSZWYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZXRM
b2NhbDogeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQncyBhIEdldExvY2FsLlxuIik7CisjZW5kaWYKICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlSW5kZXgoZWRnZSwgb3JpZ2luYWxOb2RlSW5kZXgsIGNo
YW5nZVJlZik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFBo
aToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQncyBQaGkv
U2V0QXJndW1lbnQuXG4iKTsKKyNlbmRpZgogICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0TG9j
YWwhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDE3LDEyICs0MzgsNiBAQCBw
cml2YXRlOgogCiAgICAgICAgIE5vZGUmIHNlY29uZE5vZGUgPSBtX2dyYXBoW2F0U2Vjb25kVGFp
bF07CiAgICAgICAgIAotICAgICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc2Vjb25kIGJsb2NrIGRpZCBz
b21ldGhpbmcgdG8gYSB2YXJpYWJsZSB0aGF0IGlzIGNhcHR1cmVkLCBzbyByZWZsZWN0IHRoaXMu
Ci0gICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KSA9IGF0U2Vjb25kVGFpbDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAKICAgICAgICAgc3dpdGNoIChzZWNvbmROb2RlLm9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKICAgICAgICAgY2FzZSBGbHVzaDogewpAQCAtNDQyLDEzICs0NTcsMzUgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgIC8v
IEtlZXAgd2hhdCB3YXMgaW4gdGhlIGZpcnN0IGJsb2NrLCBhbmQgYWRqdXN0IHRoZSBzdWJzdGl0
dXRpb24gdG8gYWNjb3VudCBmb3IKLSAgICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgc3VjY2Vz
c29ycyB3aWxsIHJlZmVyIHRvIHRoZSBjaGlsZCBvZiB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAg
ICBBU1NFUlQoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0g
Tm9Ob2RlKTsKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKSA9Ci0g
ICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbigKLSAgICAgICAgICAgICAgICAgICAg
c2Vjb25kTm9kZS5jaGlsZDEoKS5pbmRleCgpLAotICAgICAgICAgICAgICAgICAgICBza2lwR2V0
TG9jYWwoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpKTsKKyAg
ICAgICAgICAgIC8vIElmIGl0J3MgYSBHZXRMb2NhbCBvbiBhIGNhcHR1cmVkIHZhciwgdGhlbiBk
ZWZpbml0ZWx5IGtlZXAgd2hhdCB3YXMKKyAgICAgICAgICAgIC8vIGluIHRoZSBzZWNvbmQgYmxv
Y2suIEluIHBhcnRpY3VsYXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAg
ICAgIC8vIGJsb2NrIGRvZXNuJ3QgZXZlbiBrbm93IGFib3V0IHRoaXMgdmFyaWFibGUuCisgICAg
ICAgICAgICBpZiAoc2Vjb25kTm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgp
KSB7CisgICAgICAgICAgICAgICAgZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCkgPSBhdFNlY29uZFRhaWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0
aGUgc2Vjb25kIGJsb2NrIGhhZCBhIEdldExvY2FsIGFuZCB0aGUgZmlyc3QgYmxvY2sKKyAgICAg
ICAgICAgIC8vIGhhZCBhIFNldEFyZ3VtZW50IG9yIGEgUGhpLiBUaGVuIHVwZGF0ZSB0aGUgdGFp
bC4gT3RoZXJ3aXNlIGtlZXAgd2hhdCB3YXMgaW4gdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBi
bG9jay4KKyAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0VGFpbCA9IGZpcnN0QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgQVNTRVJUKGF0Rmly
c3RUYWlsICE9IE5vTm9kZSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbYXRGaXJzdFRh
aWxdLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICBj
YXNlIFBoaToKKyAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChvcGVyYW5kKSA9IGF0U2Vjb25kVGFpbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2FzIGlu
IHRoZSBmaXJzdCBibG9jaywgYW5kIGFkanVzdCB0aGUgc3Vic3RpdHV0aW9uIHRvIGFjY291bnQg
Zm9yCisgICAgICAgICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCBzdWNjZXNzb3JzIHdpbGwgcmVm
ZXIgdG8gdGhlIGNoaWxkIG9mIHRoZSBHZXRMb2NhbC4KKyAgICAgICAgICAgICAgICBBU1NFUlQo
Zmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgIT0gTm9Ob2RlKTsK
KyAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPQorICAgICAg
ICAgICAgICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9uKAorICAgICAgICAgICAgICAgICAgICAg
ICAgc2Vjb25kTm9kZS5jaGlsZDEoKS5pbmRleCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
c2tpcEdldExvY2FsKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQp
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTYsNyArNTMzLDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkp
OwogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBQaGFudG9tICYmICEhbm9kZS5jaGls
ZDEoKSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgUGhhbnRvbTogeworICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
QVNTRVJUKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSYgcG9z
c2libGVMb2NhbE9wID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgICAgICAgICBp
ZiAocG9zc2libGVMb2NhbE9wLmhhc0xvY2FsKCkpIHsKQEAgLTUwNiw2ICs1NDcsMjUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLm9wKCkgPT0gU2V0TG9jYWwp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5jaGlsZHJl
bi5jaGlsZDEoKSwgc2V0TG9jYWwuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZmx1c2ggY291bGQg
dXNlIGEgR2V0TG9jYWwsIFNldExvY2FsLCBTZXRBcmd1bWVudCwgb3IgYSBQaGkuCisgICAgICAg
ICAgICAgICAgLy8gSWYgaXQgdXNlcyBhIEdldExvY2FsLCBpdCdsbCBiZSB0YWtlbiBjYXJlIG9m
IGJlbG93LiBJZiBpdCB1c2VzIGEKKyAgICAgICAgICAgICAgICAvLyBTZXRMb2NhbCBvciBTZXRB
cmd1bWVudCwgdGhlbiBpdCBtdXN0IGJlIHVzaW5nIGEgbm9kZSBmcm9tIHRoZQorICAgICAgICAg
ICAgICAgIC8vIHNhbWUgYmxvY2suIEJ1dCBpZiBpdCB1c2VzIGEgUGhpLCB0aGVuIHdlIHNob3Vs
ZCByZWRpcmVjdCBpdCB0bworICAgICAgICAgICAgICAgIC8vIHVzZSB3aGF0ZXZlciB0aGUgZmly
c3QgYmxvY2sgYWR2ZXJ0aXNlZCBhcyBhIHRhaWwgb3BlcmFuZC4KKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5vcCgpICE9IFBoaSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGF0
Rmlyc3RJbmRleCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUubG9j
YWwoKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUuY2hpbGRyZW4u
Y2hpbGQxKCksIEVkZ2UoYXRGaXJzdEluZGV4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUuc2hvdWxkR2VuZXJhdGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQxLDYgKzQ0MSwzMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwog
ICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggZ2V0TG9jYWxMb2FkRWxpbWluYXRpb24oVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4
IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBwZXJm
b3JtU3Vic3RpdHV0aW9uKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCiAgICAgewog
ICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgpAQCAt
NDYyLDE1ICs0ODcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJl
ZigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCByZXBs
YWNlbWVudCkKKyAgICBib29sIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCByZXBsYWNlbWVudCkK
ICAgICB7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBC
ZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rp
b25zIGRvbid0CiAgICAgICAgIC8vIGFncmVlLgogICAgICAgICBpZiAobV9ncmFwaFttX2NvbXBp
bGVJbmRleF0ucHJlZGljdGlvbigpICE9IG1fZ3JhcGhbcmVwbGFjZW1lbnRdLnByZWRpY3Rpb24o
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBk
YXRhTG9nKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY29tcGlsZUluZGV4LCByZXBsYWNl
bWVudCk7CkBAIC00ODIsNiArNTA3LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBu
b2RlLgogICAgICAgICBtX3JlcGxhY2VtZW50c1ttX2NvbXBpbGVJbmRleF0gPSByZXBsYWNlbWVu
dDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAgICB2b2lk
IGVsaW1pbmF0ZSgpCkBAIC01NjksNiArNTk2LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBOb2RlSW5kZXggcG9zc2libGVSZXBsYWNl
bWVudCA9IGdldExvY2FsTG9hZEVsaW1pbmF0aW9uKHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAg
ICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCgKKyAgICAgICAgICAgICAgICB2
YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOworICAgICAgICAgICAgaWYgKG9sZFRhaWxJbmRl
eCA9PSBtX2NvbXBpbGVJbmRleCkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpID0KKyAg
ICAgICAgICAgICAgICAgICAgcG9zc2libGVSZXBsYWNlbWVudDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBK
U0NvbnN0YW50OgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzdHJhbmdlLCBidXQgbmVjZXNzYXJ5
LiBTb21lIHBoYXNlcyB3aWxsIGNvbnZlcnQgbm9kZXMgdG8gY29uc3RhbnRzLAogICAgICAgICAg
ICAgLy8gd2hpY2ggbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGVkIGNvbnN0YW50cy4gV2UgdXNlIENT
RSB0byBjbGVhbiB0aGlzIHVwLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwzMyAr
MzQsNTYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIE9wY29kZUlEIG9wY29kZUlEKQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnRmFpbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgT3Bjb2RlSUQgb3Bjb2RlSUQsIGJvb2wgcmVzdWx0KQogeworICAg
IEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgZGF0YUxvZygiQ2Fubm90IGhhbmRsZSBjb2RlIGJsb2NrICVwIGJlY2F1c2Ug
b2Ygb3Bjb2RlICVzLlxuIiwgY29kZUJsb2NrLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0ob3Bjb2Rl
SUQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwogI2VuZGlmCiB9CiAKLXRlbXBsYXRlPGJv
b2wgKCpjYW5IYW5kbGVPcGNvZGUpKE9wY29kZUlEKT4KLWJvb2wgY2FuSGFuZGxlT3Bjb2RlcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z0ZhaWwoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIE9wY29kZUlEIG9wY29kZUlELCBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0
KQoreworICAgIEFTU0VSVChyZXN1bHQgIT0gQ2FuQ29tcGlsZSk7CisjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQorICAgIGlmIChyZXN1bHQgPT0gQ2Fubm90Q29tcGlsZSkKKyAgICAgICAg
ZGF0YUxvZygiQ2Fubm90IGhhbmRsZSBjb2RlIGJsb2NrICVwIGJlY2F1c2Ugb2Ygb3Bjb2RlICVz
LlxuIiwgY29kZUJsb2NrLCBvcGNvZGVOYW1lc1tvcGNvZGVJRF0pOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IFNob3VsZFByb2ZpbGUpOworICAgICAgICBkYXRhTG9nKCJD
YW5ub3QgY29tcGlsZSBjb2RlIGJsb2NrICVwIGJlY2F1c2Ugb2Ygb3Bjb2RlICVzLCBidXQgaW5s
aW5pbmcgbWlnaHQgYmUgcG9zc2libGUuXG4iLCBjb2RlQmxvY2ssIG9wY29kZU5hbWVzW29wY29k
ZUlEXSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyAgICBV
TlVTRURfUEFSQU0ob3Bjb2RlSUQpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworI2VuZGlm
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIFJldHVyblR5cGUgKCpjYW5IYW5k
bGVPcGNvZGUpKE9wY29kZUlELCBDb2RlQmxvY2sqLCBJbnN0cnVjdGlvbiopPgorUmV0dXJuVHlw
ZSBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrLCBSZXR1cm5UeXBlIGluaXRp
YWxWYWx1ZSkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPmds
b2JhbERhdGEoKS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0Jl
Z2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uQ291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBS
ZXR1cm5UeXBlIHJlc3VsdCA9IGluaXRpYWxWYWx1ZTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0ID0gMDsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OyAp
IHsKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25z
QmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewotI2RlZmluZSBERUZJTkVfT1Aob3Bj
b2RlLCBsZW5ndGgpICAgICAgICAgICAgICAgXAotICAgICAgICBjYXNlIG9wY29kZTogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFjYW5IYW5kbGVPcGNvZGUo
b3Bjb2RlKSkgeyAgICAgXAotICAgICAgICAgICAgICAgIGRlYnVnRmFpbChjb2RlQmxvY2ssIG9w
Y29kZSk7ICAgXAotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gbGVuZ3RoOyAgICAgICAgICAgXAotICAgICAg
ICAgICAgYnJlYWs7CisjZGVmaW5lIERFRklORV9PUChvcGNvZGUsIGxlbmd0aCkgXAorICAgICAg
ICBjYXNlIG9wY29kZTogeyBcCisgICAgICAgICAgICBSZXR1cm5UeXBlIGN1cnJlbnQgPSBjYW5I
YW5kbGVPcGNvZGUoIFwKKyAgICAgICAgICAgICAgICBvcGNvZGUsIGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldCk7IFwKKyAgICAgICAgICAgIGlmIChjdXJyZW50
IDwgcmVzdWx0KSB7IFwKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50OyBcCisgICAg
ICAgICAgICAgICAgZGVidWdGYWlsKGNvZGVCbG9jaywgb3Bjb2RlLCBjdXJyZW50KTsgXAorICAg
ICAgICAgICAgfSBcCisgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBsZW5ndGg7IFwKKyAg
ICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIH0KICAgICAgICAgICAgIEZPUl9FQUNIX09QQ09E
RV9JRChERUZJTkVfT1ApCiAjdW5kZWYgREVGSU5FX09QCiAgICAgICAgIGRlZmF1bHQ6CkBAIC02
OSwxOSArOTIsMTkgQEAgYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsbwog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCitD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5Db21waWxl
T3Bjb2RlPihjb2RlQmxvY2spOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICBy
ZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxDYXBhYmlsaXR5TGV2ZWwsIGNhbkNvbXBpbGVPcGNvZGU+
KGNvZGVCbG9jaywgQ2FuQ29tcGlsZSk7CiB9CiAKIGJvb2wgY2FuSW5saW5lT3Bjb2RlcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5Jbmxp
bmVPcGNvZGU+KGNvZGVCbG9jayk7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Ym9vbCwg
Y2FuSW5saW5lT3Bjb2RlPihjb2RlQmxvY2ssIHRydWUpOwogfQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTE2
ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBERkdDYXBhYmlsaXRpZXNfaAogCiAj
aW5jbHVkZSAiSW50cmluc2ljLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAi
REZHTm9kZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgi
CkBAIC02Nyw3ICs2OCw3IEBAIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25z
dHIKIH0KIAogLy8gT3Bjb2RlIGNoZWNraW5nLgotaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29k
ZShPcGNvZGVJRCBvcGNvZGVJRCkKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZU9w
Y29kZShPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKQogewogICAg
IHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVyOgpAQCAtMTcwLDE0ICsxNzEs
MTggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcAogICAgIGNhc2Ug
b3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbDoKICAgICBj
YXNlIG9wX2dldF9hcmd1bWVudHNfbGVuZ3RoOgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIG9wX2puZXFfcHRyOgorICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZTsKICAgICAgICAgCisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHJldHVybiBTaG91bGRQcm9maWxlOwor
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ2Fu
bm90Q29tcGlsZTsKICAgICB9CiB9CiAKLWlubGluZSBib29sIGNhbklubGluZU9wY29kZShPcGNv
ZGVJRCBvcGNvZGVJRCkKK2lubGluZSBib29sIGNhbklubGluZU9wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiBwYykKIHsKICAgICBzd2l0
Y2ggKG9wY29kZUlEKSB7CiAgICAgICAgIApAQCAtMTk1LDcgKzIwMCw2IEBAIGlubGluZSBib29s
IGNhbklubGluZU9wY29kZShPcGNvZGVJRCBvcGMKICAgICAgICAgCiAgICAgLy8gSW5saW5pbmcg
ZG9lc24ndCBjb3JyZWN0bHkgcmVtYXAgcmVndWxhciBleHByZXNzaW9uIG9wZXJhbmRzLgogICAg
IGNhc2Ugb3BfbmV3X3JlZ2V4cDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAvLyBXZSBkb24ndCBzdXBwb3J0IGlubGluaW5nIGNvZGUgdGhhdCBjcmVhdGVzIGFjdGl2YXRp
b25zIG9yIGhhcyBuZXN0ZWQgZnVuY3Rpb25zLgogICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2YXRp
b246CkBAIC0yMDQsMTIgKzIwOCwxNyBAQCBpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bj
b2RlSUQgb3BjCiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCisgICAgLy8gSW5saW5pbmcgc3VwcG9ydHMgb3BfY2FsbF92YXJhcmdzIGlm
IGl0J3MgYSBjYWxsIHRoYXQganVzdCBmb3J3YXJkcyB0aGUgY2FsbGVyJ3MKKyAgICAvLyBhcmd1
bWVudHMuCisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgICAgIHJldHVybiBwY1szXS51
Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJRCk7Cisg
ICAgICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlELCBjb2RlQmxvY2ssIHBjKSA9
PSBDYW5Db21waWxlOwogICAgIH0KIH0KIAotYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxv
Y2sqKTsKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqKTsKIGJv
b2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqKTsKICNlbHNlIC8vIEVOQUJMRShERkdfSklU
KQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMjE5LDMwICsyMjgsNDIgQEAgaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rp
b25Gb3JDb25zdAogaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJs
b2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIAotaW5saW5lIGJvb2wg
Y2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCkgeyByZXR1cm4gZmFsc2U7IH0KLWlubGluZSBib29s
IGNhbklubGluZU9wY29kZShPcGNvZGVJRCkgeyByZXR1cm4gZmFsc2U7IH0KLWlubGluZSBib29s
IGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQsIENvZGVCbG9jayosIElu
c3RydWN0aW9uKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29k
ZShPcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKSB7IHJldHVybiBmYWxzZTsgfQor
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqKSB7IHJl
dHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi1pbmxpbmUgYm9v
bCBjYW5Db21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJu
IG1pZ2h0Q29tcGlsZUV2YWwoY29kZUJsb2NrKSAmJiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxv
Y2spOworICAgIGlmICghbWlnaHRDb21waWxlRXZhbChjb2RlQmxvY2spKQorICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZXMoY29k
ZUJsb2NrKTsKIH0KIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKiBj
b2RlQmxvY2spCitpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVQcm9ncmFtKENvZGVC
bG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBtaWdodENvbXBpbGVQcm9ncmFtKGNvZGVC
bG9jaykgJiYgY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKKyAgICBpZiAoIW1pZ2h0Q29t
cGlsZVByb2dyYW0oY29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Cisg
ICAgCisgICAgcmV0dXJuIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CiB9CiAKLWlubGlu
ZSBib29sIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCitp
bmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChj
b2RlQmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CisgICAgaWYgKCFtaWdo
dENvbXBpbGVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrKSkKKyAgICAgICAgcmV0dXJuIENhbm5v
dENvbXBpbGU7CisgICAgCisgICAgcmV0dXJuIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7
CiB9CiAKLWlubGluZSBib29sIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBtaWdodENv
bXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVz
KGNvZGVCbG9jayk7CisgICAgaWYgKCFtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChj
b2RlQmxvY2spKQorICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1
cm4gY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAogaW5saW5lIGJvb2wgY2FuSW5s
aW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIx
LDggQEAgZW51bSBTcGlsbFJlZ2lzdGVyc01vZGUgeyBOZWVkVG9TcGlsbCwgRAogCiBlbnVtIE5v
UmVzdWx0VGFnIHsgTm9SZXN1bHQgfTsKIAorZW51bSBDYXBhYmlsaXR5TGV2ZWwgeyBDYW5ub3RD
b21waWxlLCBTaG91bGRQcm9maWxlLCBDYW5Db21waWxlLCBDYXBhYmlsaXR5TGV2ZWxOb3RTZXQg
fTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0KKyAgICAKICNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiREZHIGNvbXBpbGluZyBjb2RlIGJs
b2NrICVwKCVwKSBmb3IgZXhlY3V0YWJsZSAlcCwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICV1
LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpKTsKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExNjg1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjksNyArMTY5LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUlu
ZGV4KQogICAgICAgICAgICAgZGF0YUxvZygiJXNAJXUlcyIsCiAgICAgICAgICAgICAgICAgICAg
IHVzZUtpbmRUb1N0cmluZyhtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS51c2VLaW5kKCkpLAog
ICAgICAgICAgICAgICAgICAgICBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5pbmRleCgpLAot
ICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyhhdChjaGls
ZElkeCkucHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb25Ub0Fi
YnJldmlhdGVkU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgYXQobV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0pLnByZWRpY3Rpb24oKSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDEoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFRlYXJPZmZBcmd1
bWVudHMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50c0xlbmd0
aCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBc
CiAgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGNy
ZWF0aW5nIGZ1bmN0aW9ucy4gKi9cCiAgICAgbWFjcm8oTmV3RnVuY3Rpb25Ob0NoZWNrLCBOb2Rl
UmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTY4NTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYyLDYgKzY2Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgog
ICAgICAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6CisgICAgICAgIGNhc2UgQ2hlY2tBcmd1bWVu
dHNOb3RDcmVhdGVkOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZURlZmF1bHRGbGFncyhu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4ODgsNiArMzg4OCwxOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCisgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6IHsKKyAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgd2F5IHRvIGNvdW50IHN1Y2ggZmFpbHVyZXMu
IFRoaXMgd2lsbCBiZSBwYXJ0IG9mCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NjMyNworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aDogewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE2
ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTQ1LDcgKzk0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGUKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUm
IG5vZGUpCiB7CiAgICAgUF9ERkdPcGVyYXRpb25fRSBzbG93Q2FsbEZ1bmN0aW9uOwotCisgICAg
CiAgICAgaWYgKG5vZGUub3AoKSA9PSBDYWxsKQogICAgICAgICBzbG93Q2FsbEZ1bmN0aW9uID0g
b3BlcmF0aW9uTGlua0NhbGw7CiAgICAgZWxzZSB7CkBAIC05NjQsOCArOTY0LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIEdQUlJlZyBjYWxsZWVHUFIg
PSBjYWxsZWUuZ3ByKCk7CiAgICAgdXNlKGNhbGxlZUVkZ2UpOwogICAgIAotICAgIC8vIFRoZSBj
YWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAobm9y
bWFsIGNhbGwpIG9yIHRoZQotICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVl
bnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rp
b24ncyBmaXJzdCBjaGlsZCBpcyB0aGUgZnVuY3Rpb247IHRoZSBzdWJzZXF1ZW50IGNoaWxkcmVu
IGFyZSB0aGUKKyAgICAvLyBhcmd1bWVudHMuCiAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2Rl
Lm51bUNoaWxkcmVuKCkgLSAxOwogICAgIAogICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlzQXJndW1lbnQpLCBjYWxs
RnJhbWVQYXlsb2FkU2xvdChSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKTsKQEAgLTM4Nzcs
NiArMzg3NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQ6IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgd2F5IHRvIGNv
dW50IHN1Y2ggZmFpbHVyZXMuIFRoaXMgd2lsbCBiZSBwYXJ0IG9mCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjMyNworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUu
Y29kZU9yaWdpbikpKSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3Ro
OiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAg
cHVibGljOgogICAgICAgICB9IFwKICAgICB9IHdoaWxlICgwKQogCisgICAgI2RlZmluZSBub3RT
ZXQgKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorCiAgICAgdm9pZCB2YWxpZGF0ZSgpCiAgICAg
ewogICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3JtYW5j
ZSwgc2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgpAQCAtMjAyLDYgKzIwNCwyMiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IGdldExvY2FsUG9zaXRpb25zKAorICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAg
ICAgICAgICAgT3BlcmFuZHM8c2l6ZV90PiBzZXRMb2NhbFBvc2l0aW9ucygKKyAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAg
ICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGdl
dExvY2FsUG9zaXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OworICAgICAgICAgICAgICAgIHNl
dExvY2FsUG9zaXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25z
LmxvY2FsKGkpID0gbm90U2V0OworICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmxv
Y2FsKGkpID0gbm90U2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTIxMyw2ICsyMzEsMzcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlSW5kZXgsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2NrLmdldChu
b2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZUluZGV4LCBibG9ja0lu
ZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLmxvY2FsKCkpID09IG5vdFNldCk7
CisgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS5sb2Nh
bCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gT25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVy
ZSBtYXkgYmUgbXVsdGlwbGUgU2V0TG9jYWxzCisgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2Ugb2YgZmx1c2hpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS5sb2NhbCgpKSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKKyAgICAgICAgICAgICAgICAg
ICAgYmxvY2tJbmRleCwgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBhcmd1
bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBi
bG9ja0luZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjIxLDYgKzI3MCwyNCBAQCBwcml2YXRl
OgogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2Rl
OwogICAgIAorICAgIHZvaWQgY2hlY2tPcGVyYW5kKAorICAgICAgICBCbG9ja0luZGV4IGJsb2Nr
SW5kZXgsIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAorICAgICAgICBPcGVy
YW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICBpZiAoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5k
KG9wZXJhbmQpID09IG5vdFNldCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgCisgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgKGJsb2NrLT5hdChn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpKSwKKyAgICAgICAgICAgICBibG9jay0+
YXQoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSksCisgICAgICAgICAgICAgYmxv
Y2tJbmRleCksCisgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
IDwgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQorICAgIAogICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7
CiAgICAgICAgIGRhdGFMb2coIkAldSIsIG5vZGVJbmRleCk7CkBAIC0yNTYsNiArMzIzLDEyIEBA
IHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVJbmRleCBub2RlSW5kZXgyLCBCbG9j
a0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBkYXRhTG9nKCJAJXUgYW5kIEAldSBp
biBCbG9jayAjJXUiLCBub2RlSW5kZXgsIG5vZGVJbmRleDIsIGJsb2NrSW5kZXgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAogICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5vZGVJbmRleCBleHBlY3RlZE5v
ZGVJbmRleCwgRWRnZSBpbmNvbWluZ0VkZ2UpCiAgICAgewogICAgICAgICBkYXRhTG9nKCJAJXUg
aW4gQmxvY2sgIyV1LCBzZWFyY2hpbmcgZm9yIEAldSBmcm9tIEAldSIsIG5vZGVJbmRleCwgYmxv
Y2tJbmRleCwgZXhwZWN0ZWROb2RlSW5kZXgsIGluY29taW5nRWRnZS5pbmRleCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBA
QCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCCiAjaWYgRU5BQkxFKERG
R19KSVQpCiB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphdGlvbkNoZWNr
S2luZCBraW5kKQogewotICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgIGlmICgh
Y2FuQmVPcHRpbWl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEp1bXAgc2tpcE9w
dGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0
aW1pemF0aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9v
cCA6IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4pLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKQEAg
LTQxOCw3ICs0MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcmFyZUNhc2VQcm9maWxlID0gMDsKLSAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisg
ICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgICAgICByYXJlQ2FzZVBy
b2ZpbGUgPSBtX2NvZGVCbG9jay0+YWRkUmFyZUNhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQp
OwogI2VuZGlmCiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gKGl0ZXIg
LSAxKS0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7
CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAgICAgaWYgKG1fY2Fu
QmVPcHRpbWl6ZWQpCisgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmcmFyZUNhc2VQcm9m
aWxlLT5tX2NvdW50ZXIpKTsKICNlbmRpZgogCkBAIC01NjYsNyArNTY2LDI0IEBAIEpJVENvZGUg
SklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICNlbmRpZgogICAgIAogI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKLSAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2RlQmxvY2stPmNh
bkNvbXBpbGVXaXRoREZHKCk7CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2Nv
ZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBzd2l0Y2ggKGxldmVsKSB7CisgICAg
Y2FzZSBERkc6OkNhbm5vdENvbXBpbGU6CisgICAgICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBmYWxz
ZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgREZHOjpTaG91bGRQcm9maWxlOgorICAgICAgICBtX2NhbkJlT3B0aW1pemVk
ID0gZmFsc2U7CisgICAgICAgIG1fc2hvdWxkRW1pdFByb2ZpbGluZyA9IHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgREZHOjpDYW5Db21waWxlOgorICAgICAgICBtX2NhbkJlT3B0aW1p
emVkID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRFbWl0UHJvZmlsaW5nID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KICNlbmRpZgogCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0bGUg
Yml0IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTYyMCw3ICs2MzcsNyBAQCBKSVRD
b2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgTGFiZWwgZnVuY3Rpb25C
b2R5ID0gbGFiZWwoKTsKICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi0gICAgaWYg
KG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpCiAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVj
dXRpb25FbnRyeUNvdW50KSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAxMTY4NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MzcsNyArODM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKICAgICAgICAgYm9vbCBjYW5CZU9wdGltaXplZCgpIHsgcmV0dXJuIG1f
Y2FuQmVPcHRpbWl6ZWQ7IH0KLSAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKCkgeyBy
ZXR1cm4gbV9jYW5CZU9wdGltaXplZDsgfQorICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxp
bmcoKSB7IHJldHVybiBtX3Nob3VsZEVtaXRQcm9maWxpbmc7IH0KICNlbHNlCiAgICAgICAgIGJv
b2wgY2FuQmVPcHRpbWl6ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBFbmFibGVz
IHVzZSBvZiB2YWx1ZSBwcm9maWxlciB3aXRoIHRpZXJlZCBjb21waWxhdGlvbiB0dXJuZWQgb2Zm
LApAQCAtODg2LDYgKzg4Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CisgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0UHJvZmlsaW5nOwogI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5U
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJ
KHJldmlzaW9uIDExNjg1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw3ICs4MTgsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQgCiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChv
cGNvZGVJRCA9PSBvcF9tdWwpOwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICAgICAg
aWYgKG1fY2FuQmVPcHRpbWl6ZWQpIHsKKyAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBiZSBhYmxlIHRvIG1lYXN1cmUgaWYgdGhp
cyBpcyB0YWtpbmcgdGhlIHNsb3cgY2FzZSBqdXN0CiAgICAgICAgICAgICAvLyBiZWNhdXNlIG9m
IG5lZ2F0aXZlIHplcm8uIElmIHRoaXMgcHJvZHVjZXMgcG9zaXRpdmUgemVybywgdGhlbiB3ZQog
ICAgICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGUgc2xvdyBjYXNlIHRvIGJlIHRha2VuIGJlY2F1
c2UgdGhhdCB3aWxsIHRocm93IG9mZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTY4NTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlJZFRyYW5zaXRpbwogICAgIC8vIElmIHdlIHN1Y2NlZWQgaW4gYWxsIG9mIG91ciBjaGVj
a3MsIGFuZCB0aGUgY29kZSB3YXMgb3B0aW1pemFibGUsIHRoZW4gbWFrZSBzdXJlIHdlCiAgICAg
Ly8gZGVjcmVtZW50IHRoZSByYXJlIGNhc2UgY291bnRlci4KICNpZiBFTkFCTEUoVkFMVUVfUFJP
RklMRVIpCi0gICAgaWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpKSB7CisgICAg
aWYgKG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpID49IERGRzo6U2hvdWxkUHJvZmls
ZSkgewogICAgICAgICBzdWIzMigKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSwKICAgICAg
ICAgICAgIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+bV9jb3VudGVyKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgLy8gSWYgd2Ugc3VjY2VlZCBpbiBh
bGwgb2Ygb3VyIGNoZWNrcywgYW5kIHRoZSBjb2RlIHdhcyBvcHRpbWl6YWJsZSwgdGhlbiBtYWtl
IHN1cmUgd2UKICAgICAvLyBkZWNyZW1lbnQgdGhlIHJhcmUgY2FzZSBjb3VudGVyLgogI2lmIEVO
QUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRo
REZHKCkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCkgPj0gREZH
OjpTaG91bGRQcm9maWxlKSB7CiAgICAgICAgIHN1YjMyKAogICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKDEpLAogICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5tX2Nv
dW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxl
LmNwcAkocmV2aXNpb24gMTE2ODU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQ29k
ZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoKICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOwogICAgICAgICAg
ICAgaWYgKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCkKICAgICAg
ICAgICAgICAgICB0eXBlID0gREZHSklUOwotICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2Nr
LT5jYW5Db21waWxlV2l0aERGR1N0YXRlKCkgPT0gQ29kZUJsb2NrOjpDb21waWxlV2l0aERGR0Zh
bHNlKQorICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGR1N0
YXRlKCkgIT0gREZHOjpDYW5Db21waWxlKQogICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGlu
ZU9ubHk7CiAgICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwo=
</data>
<flag name="review"
          id="147781"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>