<?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>77797</bug_id>
          
          <creation_ts>2012-02-03 18:46:01 -0800</creation_ts>
          <short_desc>DFG&apos;s child references from one node to another should have room for type information</short_desc>
          <delta_ts>2012-02-05 22:45:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>InRadar</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>gustavo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>549305</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-03 18:46:01 -0800</bug_when>
    <thetext>This will allow us to reason about not just whether a node is used, but whether it&apos;s used for a particular purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549306</commentid>
    <comment_count>1</comment_count>
      <attachid>125460</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-03 18:47:51 -0800</bug_when>
    <thetext>Created attachment 125460
it begins.

Work in progress.  Three files down, 51 to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549322</commentid>
    <comment_count>2</comment_count>
      <attachid>125466</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-03 19:05:26 -0800</bug_when>
    <thetext>Created attachment 125466
getting closer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549542</commentid>
    <comment_count>3</comment_count>
      <attachid>125517</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-04 23:37:59 -0800</bug_when>
    <thetext>Created attachment 125517
64-bit works

Still need to do 32-64 and make sure I didn&apos;t screw up performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549544</commentid>
    <comment_count>4</comment_count>
      <attachid>125517</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-04 23:47:36 -0800</bug_when>
    <thetext>Comment on attachment 125517
64-bit works

Attachment 125517 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11424834</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549545</commentid>
    <comment_count>5</comment_count>
      <attachid>125517</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-04 23:49:18 -0800</bug_when>
    <thetext>Comment on attachment 125517
64-bit works

Attachment 125517 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11421879</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549546</commentid>
    <comment_count>6</comment_count>
      <attachid>125517</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-04 23:58:46 -0800</bug_when>
    <thetext>Comment on attachment 125517
64-bit works

Attachment 125517 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11427085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549621</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-05 15:09:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/10810732&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549622</commentid>
    <comment_count>8</comment_count>
      <attachid>125537</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-05 15:12:20 -0800</bug_when>
    <thetext>Created attachment 125537
the patch

Made both 32_64 and 64 work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549623</commentid>
    <comment_count>9</comment_count>
      <attachid>125537</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-05 15:21:11 -0800</bug_when>
    <thetext>Comment on attachment 125537
the patch

Attachment 125537 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11427257</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549624</commentid>
    <comment_count>10</comment_count>
      <attachid>125538</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-05 15:27:56 -0800</bug_when>
    <thetext>Created attachment 125538
the patch

Fix a really bad operator precedence bug found by Qt EWS.  Instead of writing (a &lt;&lt; b) - c, I had written a &lt;&lt; b - c, which is totally different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549644</commentid>
    <comment_count>11</comment_count>
      <attachid>125538</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-02-05 17:08:59 -0800</bug_when>
    <thetext>Comment on attachment 125538
the patch

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

Other than the comments included (below?) this looks fairly sensible to me.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:173
&gt; -                    nodeIndex = addToGraph(GetLocal, OpInfo(variableAccessData), nodePtr-&gt;child1());
&gt; +                    nodeIndex = addToGraph(GetLocal, OpInfo(variableAccessData), nodePtr-&gt;child1().index());

It seems like it would be nicer to make addToGraph take a Node/NodeUse rather than a NodeIndex, which would remove some of the churn in this diff.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2273
&gt; +                phiNode-&gt;children.child1() = NodeUse(valueInPredecessor);

I&apos;d prefer setChild1(..) to returning a mutable reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549645</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-05 17:13:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 125538 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125538&amp;action=review
&gt; 
&gt; Other than the comments included (below?) this looks fairly sensible to me.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:173
&gt; &gt; -                    nodeIndex = addToGraph(GetLocal, OpInfo(variableAccessData), nodePtr-&gt;child1());
&gt; &gt; +                    nodeIndex = addToGraph(GetLocal, OpInfo(variableAccessData), nodePtr-&gt;child1().index());
&gt; 
&gt; It seems like it would be nicer to make addToGraph take a Node/NodeUse rather than a NodeIndex, which would remove some of the churn in this diff.

Do you really think that&apos;s a good idea?  There are 4 addToGraph() methods, and only 2 places where this patch needs to convert a NodeUse to NodeIndex for a call to addToGraph().  In general, ByteCodeParser almost never needs to create a node that references a child of another node - which is the only case where it would make sense for addToGraph() to take NodeUse.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2273
&gt; &gt; +                phiNode-&gt;children.child1() = NodeUse(valueInPredecessor);
&gt; 
&gt; I&apos;d prefer setChild1(..) to returning a mutable reference.

I can change those things, but it is necessary for NodeReferenceBlob to return a mutable reference.  Otherwise we&apos;d have no way of later doing a pass that ascribes types to edges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549646</commentid>
    <comment_count>13</comment_count>
      <attachid>125545</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-05 17:22:39 -0800</bug_when>
    <thetext>Created attachment 125545
the patch

Changed all present uses of childX() = foo with setChildX(foo).

I did not remove the childX() methods that returned mutable references, because that would defeat the entire purpose of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549747</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-02-05 22:45:00 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/106775</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125460</attachid>
            <date>2012-02-03 18:47:51 -0800</date>
            <delta_ts>2012-02-03 19:05:26 -0800</delta_ts>
            <desc>it begins.</desc>
            <filename>nodeuse_patch_1.diff</filename>
            <type>text/plain</type>
            <size>28614</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDEyLTAyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHJ3MgY2hpbGQgcmVmZXJlbmNlcyBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIgc2hvdWxkIGhh
dmUgcm9vbSBmb3IgdHlwZSBpbmZvcm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdPUksgSU4gUFJPR1JFU1MuICBUaGlzIGlzIHRo
ZSBzdGFydCBvZiBhIHBhaW5mdWwgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRWYXJBcmdDaGlsZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAg
ICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmF0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6cmVmKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWYpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbGVhckFuZERlcmVmQ2hpbGQxKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMik6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZDMpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDFVbmNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpmaXJzdENoaWxkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpudW1DaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6ZHVtcENoaWxkcmVuKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
UmVmZXJlbmNlQmxvYi5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChOb2RlUmVm
ZXJlbmNlQmxvYik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6Ok5vZGVS
ZWZlcmVuY2VCbG9iKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hp
bGQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpjaGlsZDEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpjaGlsZDIpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpjaGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVSZWZlcmVuY2VCbG9iOjpjaGlsZDFVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVSZWZlcmVuY2VCbG9iOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVm
ZXJlbmNlQmxvYjo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5j
ZUJsb2I6OnNldEZpcnN0Q2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VC
bG9iOjpudW1DaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6
OnNldE51bUNoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVVzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChOb2RlVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
VXNlOjpOb2RlVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVXNlOjppbmRleCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6c2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVVc2U6OnVzZUtpbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OnNldFVzZUtpbmQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlVXNlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OnNoaWZ0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlVXNlOjptYWtlV29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6
aW5kZXhJbnRlcm5hbCk6CisKIDIwMTItMDItMDMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVmaXggdGhlIHR5cGVkZWYgaW4gV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQgd2l0aCB1bmRlcnNjb3JlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEwNjY5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTksNyArMjE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlJiBm
bHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CiAgICAgICAgICAgICAgICAg
aWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRM
b2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJh
bmQpID0gbm9kZUluZGV4OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4Owog
ICAgICAgICAgICAgICAgIH0KQEAgLTIzOCw3ICsyMzgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VS
VChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+
Y2hpbGQxKCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CkBAIC0zMjcsNyAr
MzI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBpbmRleDsKIAogICAgICAgICBp
ZiAobm9kZS5vcCA9PSBVSW50MzJUb051bWJlcikKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNo
aWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKIAogICAg
ICAgICAvLyBDaGVjayBmb3IgbnVtZXJpYyBjb25zdGFudHMgYm94ZWQgYXMgSlNWYWx1ZXMuCiAg
ICAgICAgIGlmIChub2RlLm9wID09IEpTQ29uc3RhbnQpIHsKQEAgLTU3Miw3ICs1NzIsNyBAQCBw
cml2YXRlOgogICAgIH0KICAgICB2b2lkIGFkZFZhckFyZ0NoaWxkKE5vZGVJbmRleCBjaGlsZCkK
ICAgICB7Ci0gICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwor
ICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKE5vZGVVc2UoY2hpbGQpKTsK
ICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzKys7CiAgICAgfQogICAgIApAQCAtMjI0MSw5ICsy
MjQxLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAg
ICAgICAgICAvLyBHZXRMb2NhbCBhbmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3Bl
YWtpbmcgd2Ugb25seSBuZWVkIHRoZSB0d28KICAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlm
aWVkLiBCdXQgZm9yIGVmZmljaWVuY3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdl
dExvY2FscwogICAgICAgICAgICAgICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJp
YWJsZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgQVNT
RVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBt
X2dyYXBoW21fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKV0udmFyaWFibGVBY2Nl
c3NEYXRhKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVk
ZWNlc3Nvcl0uY2hpbGQxKCkuaW5kZXgoKV0udmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhb
dmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUluUHJl
ZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCkuaW5kZXgoKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgRm91bmQgQCV1LlxuIiwgdmFs
dWVJblByZWRlY2Vzc29yKTsKQEAgLTIyNjYsMTEgKzIyNjYsMTEgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZih2YWx1
ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAocGhpTm9k
ZS0+Y2hpbGQxKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxk
MSgpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAg
ICAgICAgICAgIHByaW50ZigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5cbiIsIGVu
dHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAg
cGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gdmFsdWVJblByZWRlY2Vzc29yOworICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gTm9kZVVzZSh2YWx1ZUlu
UHJlZGVjZXNzb3IpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnku
bV9waGkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihzdGRvdXQpOwpA
QCAtMjI3OCwxMSArMjI3OCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3Rh
Y2soKQogI2VuZGlmCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkgPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgU2V0dGluZyBAJXUt
PmNoaWxkMiA9IEAldS5cbiIsIGVudHJ5Lm1fcGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gdmFs
dWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpID0gTm9kZVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIENoaWxk
cmVuIG9mIEAldTogIiwgZW50cnkubV9waGkpOwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1
bXBDaGlsZHJlbihzdGRvdXQpOwpAQCAtMjI5MCwxMSArMjI5MCwxMSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogI2VuZGlmCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkgPT0g
Tm9Ob2RlKSB7CisgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKSB7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIHByaW50
ZigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAldS5cbiIsIGVudHJ5Lm1fcGhpLCB2YWx1
ZUluUHJlZGVjZXNzb3IpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRy
ZW4uZml4ZWQuY2hpbGQzID0gdmFsdWVJblByZWRlY2Vzc29yOworICAgICAgICAgICAgICAgIHBo
aU5vZGUtPmNoaWxkcmVuLmNoaWxkMygpID0gTm9kZVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IpOwog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAg
ICBwcmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9waGkpOwogICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihzdGRvdXQpOwpAQCAtMjMxNCw5ICsyMzE0
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKG5l
d1BoaSk7CiAKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0g
cGhpTm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMiA9IHBoaU5vZGUtPmNoaWxkMigpOwotICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGls
ZHJlbi5maXhlZC5jaGlsZDMgPSBwaGlOb2RlLT5jaGlsZDMoKTsKKyAgICAgICAgICAgIG5ld1Bo
aU5vZGUuY2hpbGRyZW4gPSBwaGlOb2RlLT5jaGlsZHJlbjsKIAogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIHByaW50ZigiICAgICAgQ2hpbGRy
ZW4gb2YgQCV1OiAiLCBuZXdQaGkpOwpAQCAtMjMyNCw5ICsyMzIyLDkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgICAgIHByaW50ZigiLlxuIik7CiAj
ZW5kaWYKIAotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gbmV3
UGhpOwotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gdmFsdWVJ
blByZWRlY2Vzc29yOwotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uZml4ZWQuY2hpbGQz
ID0gTm9Ob2RlOworICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBOb2Rl
VXNlKG5ld1BoaSk7CisgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IE5v
ZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVu
LmNoaWxkMygpID0gTm9kZVVzZShOb05vZGUpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBA
JXU6ICIsIGVudHJ5Lm1fcGhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTEgQEAgc3RydWN0IE5vZGVJbmRl
eFRyYWl0cyB7CiAgICAgfQogfTsKIAorZW51bSBVc2VLaW5kIHsKKyAgICBVbnR5cGVkVXNlLAor
ICAgIExhc3RVc2VLaW5kIC8vIE11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBl
bnVtLCBhcyBpdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgbnVtYmVyIG9mIGVudW0gZWxlbWVudHMu
Cit9OworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzLDE2ICsxNjMsMTYgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5k
ZXggbm9kZUluZGV4LCBDbwogICAgICAgICAgICAgICAgIHByaW50ZigiLCAiKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAg
cHJpbnRmKCJAJXUiLCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5pbmRleCgpKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkMSgpICE9IE5vTm9kZSkK
LSAgICAgICAgICAgIHByaW50ZigiQCV1Iiwgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIGlmIChu
b2RlLmNoaWxkMigpICE9IE5vTm9kZSkKLSAgICAgICAgICAgIHByaW50ZigiLCBAJXUiLCBub2Rl
LmNoaWxkMigpKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgIT0gTm9Ob2RlKQotICAgICAg
ICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICBoYXNQcmludGVk
ID0gbm9kZS5jaGlsZDEoKSAhPSBOb05vZGU7CisgICAgICAgIGlmICghIW5vZGUuY2hpbGQxKCkp
CisgICAgICAgICAgICBwcmludGYoIkAldSIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAg
ICAgIGlmICghIW5vZGUuY2hpbGQyKCkpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9k
ZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSkKKyAgICAg
ICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMygpLmluZGV4KCkpOworICAgICAgICBo
YXNQcmludGVkID0gISFub2RlLmNoaWxkMSgpOwogICAgIH0KIAogICAgIGlmIChub2RlLmhhc0Fy
aXRoTm9kZUZsYWdzKCkpIHsKQEAgLTMwNSwyMCArMzA1LDIwIEBAIHZvaWQgR3JhcGg6OmR1bXAo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgICAgICAgICAgICAgIF9jaGlsZElkeCsrKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAg
dGhpbmdUb0RvKG1fdmFyQXJnQ2hpbGRyZW5bX2NoaWxkSWR4XSk7ICAgICAgICAgICAgICAgICBc
CiAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoX25vZGUuY2hpbGQxKCkgPT0gTm9O
b2RlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgQVNT
RVJUKF9ub2RlLmNoaWxkMigpID09IE5vTm9kZSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICYmIF9ub2RlLmNoaWxkMygpID09IE5vTm9kZSk7ICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxkMSgpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJU
KCFfbm9kZS5jaGlsZDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgICAgICYmICFfbm9kZS5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
ICAgICB0aGluZ1RvRG8oX25vZGUuY2hpbGQxKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoX25vZGUuY2hpbGQy
KCkgPT0gTm9Ob2RlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKF9ub2RlLmNoaWxkMygpID09IE5vTm9kZSk7ICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxkMigpKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQVNTRVJUKCFfbm9kZS5j
aGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUuY2hpbGQy
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICBpZiAoX25vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIV9ub2RlLmNoaWxkMygpKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICB0aGluZ1RvRG8oX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDE1IEBAIHN0cnVj
dCBSZXNvbHZlR2xvYmFsRGF0YSB7CiAvLyBOb2RlcyB0aGF0IGFyZSAnZGVhZCcgcmVtYWluIGlu
IHRoZSB2ZWN0b3Igd2l0aCByZWZDb3VudCAwLgogY2xhc3MgR3JhcGggOiBwdWJsaWMgVmVjdG9y
PE5vZGUsIDY0PiB7CiBwdWJsaWM6CisgICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6b3BlcmF0
b3JbXTsKKyAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjphdDsKKyAgICAKKyAgICBOb2RlJiBv
cGVyYXRvcltdKE5vZGVVc2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsg
fQorICAgIGNvbnN0IE5vZGUmIG9wZXJhdG9yW10oTm9kZVVzZSBub2RlVXNlKSBjb25zdCB7IHJl
dHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgCisgICAgTm9kZSYgYXQoTm9kZVVzZSBu
b2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgY29uc3QgTm9kZSYg
YXQoTm9kZVVzZSBub2RlVXNlKSBjb25zdCB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9
CisgICAgCiAgICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KICAgICB2b2lk
IHJlZihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTc5LDM1ICs4OCw0MyBAQCBwdWJs
aWM6CiAgICAgICAgIGlmIChub2RlLnJlZigpKQogICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9k
ZUluZGV4KTsKICAgICB9CisgICAgdm9pZCByZWYoTm9kZVVzZSBub2RlVXNlKQorICAgIHsKKyAg
ICAgICAgcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgfQogICAgIAogICAgIHZvaWQgZGVyZWYo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIGlmIChhdChub2RlSW5kZXgpLmRl
cmVmKCkpCiAgICAgICAgICAgICBkZXJlZkNoaWxkcmVuKG5vZGVJbmRleCk7CiAgICAgfQorICAg
IHZvaWQgZGVyZWYoTm9kZVVzZSBub2RlVXNlKQorICAgIHsKKyAgICAgICAgZGVyZWYobm9kZVVz
ZS5pbmRleCgpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5v
ZGUmIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEg
PT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxKTsKLSAgICAgICAg
bm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBOb05vZGU7CisgICAgICAgIGRlcmVmKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgpID0gTm9kZVVzZSgpOwog
ICAgIH0KIAogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlJiBub2RlKQogICAgIHsK
LSAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID09IE5vTm9kZSkKKyAgICAg
ICAgaWYgKCFub2RlLmNoaWxkMigpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJl
Zihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMik7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uZml4
ZWQuY2hpbGQyID0gTm9Ob2RlOworICAgICAgICBkZXJlZihub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IE5vZGVVc2UoKTsKICAgICB9CiAKICAgICB2b2lk
IGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2Rl
LmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGls
ZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZHJlbi5m
aXhlZC5jaGlsZDMpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IE5vTm9k
ZTsKKyAgICAgICAgZGVyZWYobm9kZS5jaGlsZDMoKSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4u
Y2hpbGQzKCkgPSBOb2RlVXNlKCk7CiAgICAgfQogCiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlv
bmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChl
LmcuIElkZW50aWZpZXIgbmFtZXMpLgpAQCAtMjU1LDcgKzI3Miw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwotICAgIFZl
Y3RvcjxOb2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOworICAgIFZlY3RvcjxOb2RlVXNl
LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1f
c3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPFJlc29sdmVHbG9iYWxEYXRhPiBtX3Jlc29s
dmVHbG9iYWxEYXRhOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR05vZGVSZWZlcmVuY2VCbG9i
LmgiCiAjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCkBAIC0zNDcsMzYgKzM0OCwzMyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBjaGlsZHJlbihOb2RlUmVmZXJlbmNlQmxvYjo6
Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEo
b3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICBBU1NFUlQoIWhhc0FyaXRoTm9kZUZsYWdz
KCkpOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7Ci0gICAgICAgIGNo
aWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hp
bGQzID0gY2hpbGQzOwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0
byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBv
cCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9O
b2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikK
KyAgICAgICAgLCBjaGlsZHJlbihOb2RlUmVmZXJlbmNlQmxvYjo6Rml4ZWQsIGNoaWxkMSwgY2hp
bGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1t
Lm1fdmFsdWUpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAgICBjaGlsZHJlbi5m
aXhlZC5jaGlsZDEgPSBjaGlsZDE7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNo
aWxkMjsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAog
ICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1t
ZWRpYXRlIHZhbHVlcy4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwg
Tm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAg
ICAgICAgOiBvcChvcCkKICAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAg
ICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hp
bGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
CiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1
ZSkKQEAgLTM4NCwxNSArMzgyLDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNW
YXJBcmdzKSk7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAg
ICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhl
ZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUg
d2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1
ZXMuCiAgICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWdu
ZWQgbnVtQ2hpbGRyZW4pCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29kZU9yaWdpbihj
b2RlT3JpZ2luKQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpWYXJpYWJs
ZSwgZmlyc3RDaGlsZCwgbnVtQ2hpbGRyZW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIo
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAg
ICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtNDAwLDggKzM5Niw2IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBB
U1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLmZp
cnN0Q2hpbGQgPSBmaXJzdENoaWxkOwotICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5udW1DaGls
ZHJlbiA9IG51bUNoaWxkcmVuOwogICAgIH0KIAogICAgIGJvb2wgbXVzdEdlbmVyYXRlKCkKQEAg
LTg0NSw0MiArODM5LDQyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICEtLW1fcmVm
Q291bnQ7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGlsZDEoKQorICAgIE5vZGVVc2Ug
Y2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsK
LSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICAgICAgcmV0dXJuIGNo
aWxkcmVuLmNoaWxkMSgpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIHVzZWZ1bCBpZiB5
b3Ugd2FudCB0byBkbyBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNoaWxkCiAgICAgLy8gYmVm
b3JlIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2UgdGhpcyB3aXRoIGNhcmUg
YW5kCiAgICAgLy8gYXZvaWQgaXQgaWYgcG9zc2libGUuCi0gICAgTm9kZUluZGV4IGNoaWxkMVVu
Y2hlY2tlZCgpCisgICAgTm9kZVVzZSBjaGlsZDFVbmNoZWNrZWQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNo
aWxkMVVuY2hlY2tlZCgpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBjaGlsZDIoKQorICAgIE5v
ZGVVc2UgY2hpbGQyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFy
Z3MpKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMjsKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBjaGlsZDMoKQor
ICAgIE5vZGVVc2UgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhh
c1ZhckFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMzsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBm
aXJzdENoaWxkKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsK
LSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0Q2hpbGQ7CisgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5maXJzdENoaWxkKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIG51
bUNoaWxkcmVuKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsK
LSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuOworICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCiAgICAgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uKCkKQEAgLTEwMzQsMzEgKzEwMjgsMjMgQEAgc3RydWN0IE5vZGUgewog
ICAgIAogICAgIHZvaWQgZHVtcENoaWxkcmVuKEZJTEUqIG91dCkKICAgICB7Ci0gICAgICAgIGlm
IChjaGlsZDEoKSA9PSBOb05vZGUpCisgICAgICAgIGlmICghY2hpbGQxKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiQCV1IiwgY2hpbGQxKCkpOwotICAgICAg
ICBpZiAoY2hpbGQyKCkgPT0gTm9Ob2RlKQorICAgICAgICBmcHJpbnRmKG91dCwgIkAldSIsIGNo
aWxkMSgpLmluZGV4KCkpOworICAgICAgICBpZiAoIWNoaWxkMigpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBmcHJpbnRmKG91dCwgIiwgQCV1IiwgY2hpbGQyKCkpOwotICAgICAgICBp
ZiAoY2hpbGQzKCkgPT0gTm9Ob2RlKQorICAgICAgICBmcHJpbnRmKG91dCwgIiwgQCV1IiwgY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDMoKSk7CisgICAgICAgIGZw
cmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDMoKS5pbmRleCgpKTsKICAgICB9CiAgICAgCiAgICAg
Ly8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBO
b2RlVHlwZSBvcDsKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGlu
Zm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBj
aGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzOwotICAgICAgICB9
IGZpeGVkOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgZmlyc3RDaGls
ZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuOwotICAgICAgICB9IHZhcmlhYmxl
OwotICAgIH0gY2hpbGRyZW47CisgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVu
LCBvciBsaW5rcyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hpbGRyZW4uCisgICAgTm9k
ZVJlZmVyZW5jZUJsb2IgY2hpbGRyZW47CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIHZpcnR1YWwg
cmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikgYXNzb2NpYXRlZCB3aXRoIHRoaXMgLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVJlZmVyZW5jZUJs
b2IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVJl
ZmVyZW5jZUJsb2IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2RlUmVmZXJl
bmNlQmxvYl9oCisjZGVmaW5lIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21t
b24uaCIKKyNpbmNsdWRlICJERkdOb2RlVXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgTm9kZVJlZmVyZW5jZUJsb2IgeworcHVibGljOgorI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBGaXhlZCwKKyAgICAgICAgVmFy
aWFibGUKKyAgICB9OworI2VuZGlmCisKKyAgICBOb2RlUmVmZXJlbmNlQmxvYihLaW5kIGtpbmQp
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICA6IG1fa2luZChraW5kKQorI2VuZGlmCisg
ICAgeworICAgICAgICBpZiAoa2luZCA9PSBWYXJpYWJsZSkgeworICAgICAgICAgICAgbV93b3Jk
c1swXS5tX2VuY29kZWRXb3JkID0gVUlOVF9NQVg7CisgICAgICAgICAgICBtX3dvcmRzWzFdLm1f
ZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2Rl
UmVmZXJlbmNlQmxvYihLaW5kIGtpbmQsIE5vZGVJbmRleCBjaGlsZDEsIE5vZGVJbmRleCBjaGls
ZDIsIE5vZGVJbmRleCBjaGlsZDMpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICA6IG1f
a2luZChGaXhlZCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBr
aW5kID09IEZpeGVkKTsKKyAgICAgICAgaW5pdGlhbGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKKyAgICB9CisgICAgCisgICAgTm9kZVJlZmVyZW5jZUJsb2IoS2luZCBraW5kLCB1bnNpZ25l
ZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgIDogbV9raW5kKFZhcmlhYmxlKQorI2VuZGlmCisgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gVmFyaWFibGUpOworICAgICAgICBzZXRGaXJzdENoaWxk
KGZpcnN0Q2hpbGQpOworICAgICAgICBzZXROdW1DaGlsZHJlbihudW1DaGlsZHJlbik7CisgICAg
fQorICAgIAorICAgIGNvbnN0IE5vZGVVc2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaSA8IDMpOworICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVk
KTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CisgICAgfSAgICAKKyAgICAKKyAgICBOb2Rl
VXNlJiBjaGlsZCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCAzKTsKKyAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBGaXhlZCk7CisgICAgICAgIHJldHVybiBtX3dvcmRzW2ld
OworICAgIH0KKyAgICAKKyAgICBOb2RlVXNlIGNoaWxkMSgpIGNvbnN0IHsgcmV0dXJuIGNoaWxk
KDApOyB9CisgICAgTm9kZVVzZSBjaGlsZDIoKSBjb25zdCB7IHJldHVybiBjaGlsZCgxKTsgfQor
ICAgIE5vZGVVc2UgY2hpbGQzKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMik7IH0KKworICAgIE5v
ZGVVc2UmIGNoaWxkMSgpIHsgcmV0dXJuIGNoaWxkKDApOyB9CisgICAgTm9kZVVzZSYgY2hpbGQy
KCkgeyByZXR1cm4gY2hpbGQoMSk7IH0KKyAgICBOb2RlVXNlJiBjaGlsZDMoKSB7IHJldHVybiBj
aGlsZCgyKTsgfQorICAgIAorICAgIE5vZGVVc2UgY2hpbGQxVW5jaGVja2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV93b3Jkc1swXTsgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZShOb2RlVXNlIGNo
aWxkMSwgTm9kZVVzZSBjaGlsZDIsIE5vZGVVc2UgY2hpbGQzKQorICAgIHsKKyAgICAgICAgY2hp
bGQoMCkgPSBjaGlsZDE7CisgICAgICAgIGNoaWxkKDEpID0gY2hpbGQyOworICAgICAgICBjaGls
ZCgyKSA9IGNoaWxkMzsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKE5vZGVJbmRl
eCBjaGlsZDEsIE5vZGVJbmRleCBjaGlsZDIsIE5vZGVJbmRleCBjaGlsZDMpCisgICAgeworICAg
ICAgICBpbml0aWFsaXplKE5vZGVVc2UoY2hpbGQxKSwgTm9kZVVzZShjaGlsZDIpLCBOb2RlVXNl
KGNoaWxkMykpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7CisgICAgICAgIHJldHVybiBt
X3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQ7CisgICAgfQorICAgIHZvaWQgc2V0Rmlyc3RDaGlsZCh1
bnNpZ25lZCBmaXJzdENoaWxkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJp
YWJsZSk7CisgICAgICAgIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZCA9IGZpcnN0Q2hpbGQ7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gVmFyaWFibGUpOworICAgICAgICByZXR1cm4gbV93b3Jkc1sx
XS5tX2VuY29kZWRXb3JkOworICAgIH0KKyAgICB2b2lkIHNldE51bUNoaWxkcmVuKHVuc2lnbmVk
IG51bUNoaWxkcmVuKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJsZSk7
CisgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9IG51bUNoaWxkcmVuOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgTm9kZVVzZSBtX3dvcmRzWzNdOworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBLaW5kIG1fa2luZDsKKyNlbmRpZgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOb2Rl
UmVmZXJlbmNlQmxvYl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVV
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVVc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVVc2VfaAorI2RlZmluZSBERkdO
b2RlVXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBOb2RlUmVmZXJlbmNlQmxvYjsKKworY2xhc3MgTm9kZVVzZSB7Citw
dWJsaWM6CisgICAgTm9kZVVzZSgpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChO
b05vZGUsIFVudHlwZWRVc2UpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgTm9k
ZVVzZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgICAgICA6IG1fZW5jb2RlZFdvcmQobWFrZVdv
cmQobm9kZUluZGV4LCBVbnR5cGVkVXNlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGVV
c2UoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICA6IG1fZW5j
b2RlZFdvcmQobWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKSk7CisgICAgeworICAgIH0KKyAg
ICAKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOworICAgIH0K
KyAgICB2b2lkIHNldEluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBt
X2VuY29kZWRXb3JkID0gbWFrZVdvcmQobm9kZUluZGV4LCB1c2VLaW5kKCkpOworICAgIH0KKyAg
ICAKKyAgICBVc2VLaW5kIHVzZUtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICB1bnNpZ25lZCBtYXNrZWQgPSBtX2VuY29kZWRXb3JkICYgKCgxIDw8
IHNoaWZ0KCkgLSAxKSk7CisgICAgICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNlS2luZCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VLaW5kPihtYXNrZWQpOworICAgIH0KKyAgICB2
b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgoKSwgdXNlS2lu
ZCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBpbmRleCgp
ICE9IE5vTm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTm9kZVVzZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA9PSBvdGhlci5tX2VuY29k
ZWRXb3JkOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTm9kZVJlZmVyZW5j
ZUJsb2I7CisgICAgCisgICAgc3RhdGljIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNDsgfQor
ICAgIAorICAgIHN0YXRpYyB1aW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBV
c2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoKChub2RlSW5kZXggPDwgc2hp
ZnQoKSkgPj4gc2hpZnQoKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHVzZUtpbmQg
Pj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOworICAgICAgICBBU1NFUlQoTGFzdFVzZUtp
bmQgPD0gKDEgPDwgc2hpZnQoKSkpOworICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlm
dCgpKSB8IHVzZUtpbmQ7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBpbmRleEludGVybmFs
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9CisgICAgCisgICAg
dWludDMyX3QgbV9lbmNvZGVkV29yZDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTm9kZVVzZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125466</attachid>
            <date>2012-02-03 19:05:26 -0800</date>
            <delta_ts>2012-02-04 23:37:59 -0800</delta_ts>
            <desc>getting closer</desc>
            <filename>nodeuse_patch_2.diff</filename>
            <type>text/plain</type>
            <size>39284</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NzI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEyLTAyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHJ3MgY2hpbGQgcmVmZXJlbmNlcyBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIgc2hvdWxkIGhh
dmUgcm9vbSBmb3IgdHlwZSBpbmZvcm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdPUksgSU4gUFJPR1JFU1MuICBUaGlzIGlzIHRo
ZSBzdGFydCBvZiBhIHBhaW5mdWwgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUp
OgorICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjp0b0ludDMyKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAqIGRmZy9E
RkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
Lmg6CisgICAgICAgIChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OnJlZik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMSk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZDIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpjbGVhckFuZERlcmVmQ2hpbGQzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxk
MSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQxVW5jaGVja2VkKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxk
Myk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmR1bXBD
aGlsZHJlbik6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVJlZmVyZW5j
ZUJsb2IuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoTm9kZVJlZmVyZW5jZUJs
b2IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpOb2RlUmVmZXJlbmNl
QmxvYik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQzKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJl
bmNlQmxvYjo6Y2hpbGQxVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJl
bmNlQmxvYjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJs
b2I6OmZpcnN0Q2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpz
ZXRGaXJzdENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6bnVt
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXROdW1D
aGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR05vZGVVc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoTm9kZVVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6Tm9k
ZVVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6aW5kZXhVbmNoZWNrZWQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
VXNlOjpzZXRJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6dXNlS2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6c2V0VXNlS2luZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZVVzZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZVVzZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Om1h
a2VXb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBkZmcv
REZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFn
YXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnZvdGUp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2Fub25pY2FsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjpzdGFydEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpn
bG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnBlcmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBl
cmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAo
SlNDOjpERkc6OlNjb3JlQm9hcmQ6OnVzZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xl
QnJhbmNoKToKKwogMjAxMi0wMi0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIFByZWZpeCB0aGUgdHlwZWRlZiBpbiBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCB3aXRoIHVuZGVyc2NvcmVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsx
MDEsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ub2Rlc1tub2RlSW5kZXggLSBtX2Js
b2NrLT5iZWdpbl07CiAgICAgfQogICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9k
ZVVzZSBub2RlVXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZvck5vZGUobm9kZVVzZS5pbmRl
eCgpKTsKKyAgICB9CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZB
IHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgogICAgIC8vIGFyZ3VtZW50cywg
YW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKICAg
ICAvLyBleGVjdXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw3
ICsyMTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBt
X2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKICAgICAgICAgICAgICAgICBpZiAoZmx1c2hDaGls
ZC5vcCA9PSBQaGkpIHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nl
c3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlSW5k
ZXg7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjM4LDcgKzIzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9w
ID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKTsKKyAg
ICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKQEAgLTMyNyw3ICszMjcsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogCiAgICAgICAgIGlmIChub2RlLm9wID09
IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwogCiAgICAgICAgIC8vIENoZWNr
IGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KICAgICAgICAgaWYgKG5v
ZGUub3AgPT0gSlNDb25zdGFudCkgewpAQCAtNTcyLDcgKzU3Miw3IEBAIHByaXZhdGU6CiAgICAg
fQogICAgIHZvaWQgYWRkVmFyQXJnQ2hpbGQoTm9kZUluZGV4IGNoaWxkKQogICAgIHsKLSAgICAg
ICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgIG1fZ3Jh
cGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoTm9kZVVzZShjaGlsZCkpOwogICAgICAgICBtX251
bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCkBAIC0yMjQxLDkgKzIyNDEsOSBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgICAgIC8vIEdl
dExvY2FsIGFuZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5
IG5lZWQgdGhlIHR3bwogICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3Ig
ZWZmaWNpZW5jeSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCiAgICAg
ICAgICAgICAgICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0
YXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3JhcGhbbV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSBtX2dyYXBoW21fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGls
ZDEoKS5pbmRleCgpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLmNoaWxkMSgpOworICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1f
Z3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAg
ICAgICAgICAgICAgcHJpbnRmKCIgICAgICBGb3VuZCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNz
b3IpOwpAQCAtMjI2NiwxMSArMjI2NiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNz
UGhpU3RhY2soKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nv
cik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9
PSBOb05vZGUpIHsKKyAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJp
bnRmKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZh
bHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGls
ZHJlbi5maXhlZC5jaGlsZDEgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAg
cGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBOb2RlVXNlKHZhbHVlSW5QcmVkZWNlc3Nvcik7
CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAg
ICAgIHByaW50ZigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CiAgICAg
ICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKHN0ZG91dCk7CkBAIC0yMjc4LDExICsy
Mjc4LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAjZW5kaWYK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDIoKSA9PSBOb05vZGUpIHsKKyAgICAgICAgICAgIGlmICghcGhpTm9k
ZS0+Y2hpbGQyKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1
LlxuIiwgZW50cnkubV9waGksIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjZW5kaWYKLSAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1ZUluUHJlZGVjZXNz
b3I7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBOb2RlVXNl
KHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAi
LCBlbnRyeS5tX3BoaSk7CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKHN0
ZG91dCk7CkBAIC0yMjkwLDExICsyMjkwLDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjaygpCiAjZW5kaWYKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSA9PSBOb05vZGUpIHsKKyAg
ICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQzKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBTZXR0
aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgZW50cnkubV9waGksIHZhbHVlSW5QcmVkZWNlc3Nv
cik7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGls
ZDMgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRy
ZW4uY2hpbGQzKCkgPSBOb2RlVXNlKHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAg
ICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CiAgICAgICAgICAgICAgICAgcGhp
Tm9kZS0+ZHVtcENoaWxkcmVuKHN0ZG91dCk7CkBAIC0yMzE0LDkgKzIzMTQsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PnJlZkNvdW50KCkpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3UGhpKTsKIAotICAg
ICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBwaGlOb2RlLT5jaGls
ZDEoKTsKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gcGhp
Tm9kZS0+Y2hpbGQyKCk7Ci0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMyA9IHBoaU5vZGUtPmNoaWxkMygpOworICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJl
biA9IHBoaU5vZGUtPmNoaWxkcmVuOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IG5ld1BoaSk7CkBAIC0yMzI0LDkgKzIzMjIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9j
ZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogCi0gICAg
ICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBuZXdQaGk7Ci0gICAgICAg
ICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7
Ci0gICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBOb05vZGU7Cisg
ICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IE5vZGVVc2UobmV3UGhpKTsK
KyAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gTm9kZVVzZSh2YWx1ZUlu
UHJlZGVjZXNzb3IpOworICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCkgPSBO
b2RlVXNlKE5vTm9kZSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgICAgICAgICBwcmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnku
bV9waGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lv
biAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxMSBAQCBzdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKICAg
ICB9CiB9OwogCitlbnVtIFVzZUtpbmQgeworICAgIFVudHlwZWRVc2UsCisgICAgTGFzdFVzZUtp
bmQgLy8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlz
IHVzZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVtZW50cy4KK307CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEwNjY5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjMsMTYgKzE2MywxNiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgs
IENvCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIsICIpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwotICAgICAgICAgICAgcHJpbnRmKCJAJXUi
LCBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICBwcmludGYoIkAldSIs
IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCkpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlKQotICAgICAgICAgICAg
cHJpbnRmKCJAJXUiLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkg
IT0gTm9Ob2RlKQotICAgICAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOwot
ICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSAhPSBOb05vZGUpCi0gICAgICAgICAgICBwcmludGYo
IiwgQCV1Iiwgbm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxk
MSgpICE9IE5vTm9kZTsKKyAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAg
IHByaW50ZigiQCV1Iiwgbm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgaWYgKCEhbm9k
ZS5jaGlsZDIoKSkKKyAgICAgICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMigpLmlu
ZGV4KCkpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgcHJpbnRm
KCIsIEAldSIsIG5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSAh
IW5vZGUuY2hpbGQxKCk7CiAgICAgfQogCiAgICAgaWYgKG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3Mo
KSkgewpAQCAtMzA1LDIwICszMDUsMjAgQEAgdm9pZCBHcmFwaDo6ZHVtcChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICAgICAgICAgICAgICAgICAgX2NoaWxkSWR4KyspICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92
YXJBcmdDaGlsZHJlbltfY2hpbGRJZHhdKTsgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSBl
bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgIGlmIChfbm9kZS5jaGlsZDEoKSA9PSBOb05vZGUpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoX25vZGUuY2hp
bGQyKCkgPT0gTm9Ob2RlICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgJiYgX25vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGlmICghX25vZGUuY2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLmNoaWxk
MigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgJiYgIV9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHRoaW5nVG9E
byhfbm9kZS5jaGlsZDEoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChfbm9kZS5jaGlsZDIoKSA9PSBOb05vZGUp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQo
X25vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIGlmICghX25vZGUuY2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLmNoaWxkMygpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS5jaGlsZDIoKSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
IGlmIChfbm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUuY2hpbGQzKCkpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHRo
aW5nVG9Ebyhfbm9kZS5jaGlsZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTUgQEAgc3RydWN0IFJlc29sdmVHbG9i
YWxEYXRhIHsKIC8vIE5vZGVzIHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3
aXRoIHJlZkNvdW50IDAuCiBjbGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsK
IHB1YmxpYzoKKyAgICB1c2luZyBWZWN0b3I8Tm9kZSwgNjQ+OjpvcGVyYXRvcltdOworICAgIHVz
aW5nIFZlY3RvcjxOb2RlLCA2ND46OmF0OworICAgIAorICAgIE5vZGUmIG9wZXJhdG9yW10oTm9k
ZVVzZSBub2RlVXNlKSB7IHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgY29uc3Qg
Tm9kZSYgb3BlcmF0b3JbXShOb2RlVXNlIG5vZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVV
c2UuaW5kZXgoKSk7IH0KKyAgICAKKyAgICBOb2RlJiBhdChOb2RlVXNlIG5vZGVVc2UpIHsgcmV0
dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAgICBjb25zdCBOb2RlJiBhdChOb2RlVXNlIG5v
ZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAgICAKICAgICAv
LyBNYXJrIGEgbm9kZSBhcyBiZWluZyByZWZlcmVuY2VkLgogICAgIHZvaWQgcmVmKE5vZGVJbmRl
eCBub2RlSW5kZXgpCiAgICAgewpAQCAtNzksMzUgKzg4LDQzIEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKG5vZGUucmVmKCkpCiAgICAgICAgICAgICByZWZDaGlsZHJlbihub2RlSW5kZXgpOwogICAg
IH0KKyAgICB2b2lkIHJlZihOb2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICByZWYobm9k
ZVVzZS5pbmRleCgpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBkZXJlZihOb2RlSW5kZXggbm9k
ZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKGF0KG5vZGVJbmRleCkuZGVyZWYoKSkKICAgICAg
ICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZUluZGV4KTsKICAgICB9CisgICAgdm9pZCBkZXJlZihO
b2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOwor
ICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKICAg
ICB7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9PSBOb05vZGUpCisg
ICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZGVyZWYobm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEpOwotICAgICAgICBub2RlLmNoaWxkcmVu
LmZpeGVkLmNoaWxkMSA9IE5vTm9kZTsKKyAgICAgICAgZGVyZWYobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBOb2RlVXNlKCk7CiAgICAgfQogCiAgICAg
dm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBpZiAo
bm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUu
Y2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGRy
ZW4uZml4ZWQuY2hpbGQyKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBO
b05vZGU7CisgICAgICAgIGRlcmVmKG5vZGUuY2hpbGQyKCkpOworICAgICAgICBub2RlLmNoaWxk
cmVuLmNoaWxkMigpID0gTm9kZVVzZSgpOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXJBbmREZXJl
ZkNoaWxkMyhOb2RlJiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4uZml4
ZWQuY2hpbGQzID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMyk7
Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9Ob2RlOworICAgICAgICBk
ZXJlZihub2RlLmNoaWxkMygpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IE5v
ZGVVc2UoKTsKICAgICB9CiAKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkg
YWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmll
ciBuYW1lcykuCkBAIC0yNTUsNyArMjcyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFZlY3Rv
cjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7Ci0gICAgVmVjdG9yPE5vZGVJbmRl
eCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CisgICAgVmVjdG9yPE5vZGVVc2UsIDE2PiBtX3ZhckFy
Z0NoaWxkcmVuOwogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNz
RGF0YTsKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7
CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHTm9kZVJlZmVyZW5jZUJsb2IuaCIKICNpbmNsdWRl
ICJERkdPcGVyYW5kcy5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2lu
Y2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTM0NywzNiArMzQ4LDMzIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGls
ZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMg
PSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3Jp
Z2luKQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNW
YXJBcmdzKSk7CiAgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7Ci0gICAgICAg
IGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQu
Y2hpbGQyID0gY2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7
CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4g
YW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAg
IDogb3Aob3ApCiAgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIGNo
aWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykK
ICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAg
ICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQo
IShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9
IGNoaWxkMTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOwotICAgICAg
ICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3Ry
dWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVz
LgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGlt
bTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9w
KQogICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBjaGlsZHJlbihO
b2RlUmVmZXJlbmNlQmxvYjo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAg
ICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBt
X3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtMzg0LDE1
ICszODIsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0
Tm9uZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKLSAg
ICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOwotICAgICAgICBjaGlsZHJlbi5m
aXhlZC5jaGlsZDIgPSBjaGlsZDI7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNo
aWxkMzsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFi
bGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBOb2Rl
KFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGlt
bTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJl
bikKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisg
ICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OlZhcmlhYmxlLCBmaXJzdENoaWxk
LCBudW1DaGlsZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhp
bW0xLm1fdmFsdWUpCkBAIC00MDAsOCArMzk2LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAs
IG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5v
ZGVIYXNWYXJBcmdzKTsKLSAgICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZp
cnN0Q2hpbGQ7Ci0gICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuID0gbnVtQ2hp
bGRyZW47CiAgICAgfQogCiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpAQCAtODQ1LDQyICs4Mzks
NDIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gIS0tbV9yZWZDb3VudDsKICAgICB9
CiAgICAgCi0gICAgTm9kZUluZGV4IGNoaWxkMSgpCisgICAgTm9kZVVzZSBjaGlsZDEoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAgICByZXR1
cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQx
KCk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRv
IGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3QgY2hpbGQKICAgICAvLyBiZWZvcmUgYWxzbyBkb2lu
ZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVzZSB0aGlzIHdpdGggY2FyZSBhbmQKICAgICAvLyBh
dm9pZCBpdCBpZiBwb3NzaWJsZS4KLSAgICBOb2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAg
ICBOb2RlVXNlIGNoaWxkMVVuY2hlY2tlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gY2hpbGRy
ZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxVW5jaGVja2Vk
KCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMigpCisgICAgTm9kZVVzZSBjaGlsZDIo
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAg
ICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgICAgICByZXR1cm4gY2hpbGRyZW4u
Y2hpbGQyKCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMygpCisgICAgTm9kZVVzZSBj
aGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwot
ICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAgICAgICByZXR1cm4gY2hp
bGRyZW4uY2hpbGQzKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1
cm4gY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZDsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVu
LmZpcnN0Q2hpbGQoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1
cm4gY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW47CisgICAgICAgIHJldHVybiBjaGlsZHJl
bi5udW1DaGlsZHJlbigpOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24oKQpAQCAtMTAzNCwzMSArMTAyOCwyMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgdm9p
ZCBkdW1wQ2hpbGRyZW4oRklMRSogb3V0KQogICAgIHsKLSAgICAgICAgaWYgKGNoaWxkMSgpID09
IE5vTm9kZSkKKyAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZnByaW50ZihvdXQsICJAJXUiLCBjaGlsZDEoKSk7Ci0gICAgICAgIGlmIChjaGlsZDIo
KSA9PSBOb05vZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiQCV1IiwgY2hpbGQxKCkuaW5kZXgo
KSk7CisgICAgICAgIGlmICghY2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDIoKSk7Ci0gICAgICAgIGlmIChjaGlsZDMoKSA9
PSBOb05vZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDIoKS5pbmRleCgp
KTsKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZnByaW50ZihvdXQsICIsIEAldSIsIGNoaWxkMygpKTsKKyAgICAgICAgZnByaW50ZihvdXQsICIs
IEAldSIsIGNoaWxkMygpLmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGVudW0g
dmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwog
ICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1
cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW47Ci0gICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuICgwIGZv
ciBubyBjaGlsZCkuCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7Ci0gICAgICAgIH0gZml4ZWQ7Ci0gICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkOwotICAgICAgICAg
ICAgdW5zaWduZWQgbnVtQ2hpbGRyZW47Ci0gICAgICAgIH0gdmFyaWFibGU7Ci0gICAgfSBjaGls
ZHJlbjsKKyAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRv
IGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KKyAgICBOb2RlUmVmZXJlbmNlQmxv
YiBjaGlsZHJlbjsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1i
ZXIgKHNwaWxsIGxvY2F0aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVSZWZlcmVuY2VCbG9iLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKKyNk
ZWZpbmUgREZHTm9kZVJlZmVyZW5jZUJsb2JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIkRGR05vZGVVc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBOb2RlUmVmZXJlbmNlQmxvYiB7CitwdWJsaWM6CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIGVudW0gS2luZCB7CisgICAgICAgIEZpeGVkLAorICAgICAgICBWYXJpYWJsZQorICAgIH07
CisjZW5kaWYKKworICAgIE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2luZCkKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIDogbV9raW5kKGtpbmQpCisjZW5kaWYKKyAgICB7CisgICAgICAg
IGlmIChraW5kID09IFZhcmlhYmxlKSB7CisgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2Rl
ZFdvcmQgPSBVSU5UX01BWDsKKyAgICAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9
IFVJTlRfTUFYOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVSZWZlcmVuY2VCbG9i
KEtpbmQga2luZCwgTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4
IGNoaWxkMykKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIDogbV9raW5kKEZpeGVkKQor
I2VuZGlmCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gRml4ZWQp
OworICAgICAgICBpbml0aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgIH0KKyAg
ICAKKyAgICBOb2RlUmVmZXJlbmNlQmxvYihLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQs
IHVuc2lnbmVkIG51bUNoaWxkcmVuKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgOiBt
X2tpbmQoVmFyaWFibGUpCisjZW5kaWYKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoa2lu
ZCwga2luZCA9PSBWYXJpYWJsZSk7CisgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7
CisgICAgICAgIHNldE51bUNoaWxkcmVuKG51bUNoaWxkcmVuKTsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgTm9kZVVzZSYgY2hpbGQodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgMyk7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOworICAgICAgICBy
ZXR1cm4gbV93b3Jkc1tpXTsKKyAgICB9ICAgIAorICAgIAorICAgIE5vZGVVc2UmIGNoaWxkKHVu
c2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IDMpOworICAgICAgICBBU1NFUlQo
bV9raW5kID09IEZpeGVkKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CisgICAgfQorICAg
IAorICAgIE5vZGVVc2UgY2hpbGQxKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCk7IH0KKyAgICBO
b2RlVXNlIGNoaWxkMigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkKDEpOyB9CisgICAgTm9kZVVzZSBj
aGlsZDMoKSBjb25zdCB7IHJldHVybiBjaGlsZCgyKTsgfQorCisgICAgTm9kZVVzZSYgY2hpbGQx
KCkgeyByZXR1cm4gY2hpbGQoMCk7IH0KKyAgICBOb2RlVXNlJiBjaGlsZDIoKSB7IHJldHVybiBj
aGlsZCgxKTsgfQorICAgIE5vZGVVc2UmIGNoaWxkMygpIHsgcmV0dXJuIGNoaWxkKDIpOyB9Cisg
ICAgCisgICAgTm9kZVVzZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRz
WzBdOyB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKE5vZGVVc2UgY2hpbGQxLCBOb2RlVXNl
IGNoaWxkMiwgTm9kZVVzZSBjaGlsZDMpCisgICAgeworICAgICAgICBjaGlsZCgwKSA9IGNoaWxk
MTsKKyAgICAgICAgY2hpbGQoMSkgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkKDIpID0gY2hpbGQz
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSwgTm9k
ZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICB7CisgICAgICAgIGluaXRpYWxp
emUoTm9kZVVzZShjaGlsZDEpLCBOb2RlVXNlKGNoaWxkMiksIE5vZGVVc2UoY2hpbGQzKSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9l
bmNvZGVkV29yZDsKKyAgICB9CisgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0
Q2hpbGQpCisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAg
ICAgbV93b3Jkc1swXS5tX2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBWYXJpYWJsZSk7CisgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdv
cmQ7CisgICAgfQorICAgIHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4p
CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93
b3Jkc1sxXS5tX2VuY29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBOb2RlVXNlIG1fd29yZHNbM107CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEtp
bmQgbV9raW5kOworI2VuZGlmCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVSZWZlcmVuY2VCbG9i
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVXNlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHTm9kZVVzZV9oCisjZGVmaW5lIERGR05vZGVVc2VfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIE5vZGVSZWZlcmVuY2VCbG9iOworCitjbGFzcyBOb2RlVXNlIHsKK3B1YmxpYzoKKyAgICBO
b2RlVXNlKCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKE5vTm9kZSwgVW50eXBl
ZFVzZSkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBOb2RlVXNlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgs
IFVudHlwZWRVc2UpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZVVzZShOb2RlSW5kZXgg
bm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtl
V29yZChub2RlSW5kZXgsIHVzZUtpbmQpKTsKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGVJ
bmRleCBpbmRleFVuY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hp
ZnQoKTsgfQorICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkID4+IHNoaWZ0KCk7Cisg
ICAgfQorICAgIHZvaWQgc2V0SW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChub2RlSW5kZXgsIHVzZUtpbmQoKSk7CisgICAg
fQorICAgIAorICAgIFVzZUtpbmQgdXNlS2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7CisgICAgICAgIHVuc2lnbmVkIG1hc2tlZCA9IG1fZW5jb2RlZFdvcmQgJiAo
KDEgPDwgc2hpZnQoKSAtIDEpKTsKKyAgICAgICAgQVNTRVJUKG1hc2tlZCA8IExhc3RVc2VLaW5k
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVzZUtpbmQ+KG1hc2tlZCk7CisgICAgfQor
ICAgIHZvaWQgc2V0VXNlS2luZChVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7CisgICAgICAgIG1fZW5jb2RlZFdvcmQgPSBtYWtlV29yZChpbmRleCgpLCB1
c2VLaW5kKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4KCkgIT0gTm9Ob2RlOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
aXNTZXQoKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShOb2RlVXNlIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPT0gb3RoZXIubV9lbmNvZGVk
V29yZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5vZGVSZWZlcmVuY2VC
bG9iOworICAgIAorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7IH0KKyAg
ICAKKyAgICBzdGF0aWMgdWludDMyX3QgbWFrZVdvcmQoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNl
S2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgobm9kZUluZGV4IDw8IHNoaWZ0
KCkpID4+IHNoaWZ0KCkpID09IG5vZGVJbmRleCk7CisgICAgICAgIEFTU0VSVCh1c2VLaW5kID49
IDAgJiYgdXNlS2luZCA8IExhc3RVc2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKExhc3RVc2VLaW5k
IDw9ICgxIDw8IHNoaWZ0KCkpKTsKKyAgICAgICAgcmV0dXJuIChub2RlSW5kZXggPDwgc2hpZnQo
KSkgfCB1c2VLaW5kOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBtX2VuY29kZWRXb3JkOwor
fTsKKworYm9vbCBvcGVyYXRvcj09KE5vZGVVc2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRl
eCkKK3sKKyAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpID09IG5vZGVJbmRleDsK
K30KK2Jvb2wgb3BlcmF0b3I9PShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVXNlIG5vZGVVc2Up
Cit7CisgICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHTm9kZVVzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEw
LDEzICsyMTAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkg
KyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJn
ZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGlmICgh
bm9kZS5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3Mo
ZmxhZ3MpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IE5vTm9kZSkKKyAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5t
ZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDMoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CiAgICAgICAgICAg
ICB9CkBAIC02NzYsNyArNjc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZU5v
ZGVQcmVkaWN0aW9ucyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgdm90ZShOb2RlSW5kZXggbm9kZUluZGV4LCBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxv
dCBiYWxsb3QpCisgICAgdm9pZCB2b3RlKE5vZGVVc2Ugbm9kZVVzZSwgVmFyaWFibGVBY2Nlc3NE
YXRhOjpCYWxsb3QgYmFsbG90KQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX2dyYXBoW25vZGVJ
bmRleF0ub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgpAQCAtNzAxLDEzICs3MDEs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUu
Y2hpbGQxKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEo
KSwgYmFsbG90KTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKQorICAgICAg
ICBpZiAoIW5vZGUuY2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZvdGUo
bm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgPT0gTm9O
b2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsKICAgICB9CkBAIC05NzcsOCArOTc3
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewotICAgICAgICAgICAg
aWYgKG5vZGUuY2hpbGQzKCkgIT0gTm9Ob2RlICYmIG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ub3Ag
PT0gTm9wKQotICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9O
b2RlOworICAgICAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDMoKSAmJiBtX2dyYXBoW25vZGUuY2hp
bGQzKCldLm9wID09IE5vcCkKKyAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygp
ID0gTm9kZVVzZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVm
YXVsdDoKQEAgLTEwMDUsMTMgKzEwMDUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09
IFZhbHVlVG9OdW1iZXIpCi0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRl
eF0uY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0u
Y2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRl
eF0ub3AgPT0gVmFsdWVUb0ludDMyKQotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtu
b2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtub2Rl
SW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUlu
ZGV4OwogICAgIH0KKyAgICBOb2RlSW5kZXggY2Fub25pY2FsaXplKE5vZGVVc2Ugbm9kZVVzZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobm9kZVVzZS5pbmRleFVuY2hlY2tl
ZCgpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gQ29tcHV0ZXMgd2hlcmUgdGhlIHNlYXJjaCBmb3Ig
YSBjYW5kaWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0IGNhbGwKICAgICAvLyB0aGlz
IGRpcmVjdGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFzIGl0IGRvZXMgbG9nZ2luZyBp
biBkZWJ1ZyBtb2RlLgpAQCAtMTA2MSw3ICsxMDY1LDEwIEBAIHByaXZhdGU6CiAgICAgTm9kZUlu
ZGV4IHN0YXJ0SW5kZXgoKQogICAgIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdOwotICAgICAgICByZXR1cm4gc3RhcnRJbmRleEZvckNoaWxkcmVuKG5vZGUu
Y2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIG5vZGUuY2hpbGQzKCkpOworICAgICAgICByZXR1cm4g
c3RhcnRJbmRleEZvckNoaWxkcmVuKAorICAgICAgICAgICAgbm9kZS5jaGlsZDEoKS5pbmRleFVu
Y2hlY2tlZCgpLAorICAgICAgICAgICAgbm9kZS5jaGlsZDIoKS5pbmRleFVuY2hlY2tlZCgpLAor
ICAgICAgICAgICAgbm9kZS5jaGlsZDMoKS5pbmRleFVuY2hlY2tlZCgpKTsKICAgICB9CiAgICAg
CiAgICAgTm9kZUluZGV4IGVuZEluZGV4Rm9yUHVyZUNTRSgpCkBAIC0xMjA3LDcgKzEyMTQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRH
bG9iYWxWYXI6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyICYmIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBn
bG9iYWxPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTE0NDIsMjIgKzE0NDksMjIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGVJbmRl
eCYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRp
b24oTm9kZVVzZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIC8v
IENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCi0gICAgICAgIGlmIChj
aGlsZCA9PSBOb05vZGUpCisgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQu
Ci0gICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkXTsK
KyAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9yZXBsYWNlbWVudHNbY2hpbGQuaW5k
ZXgoKV07CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgICAgICBjaGlsZCA9IHJlcGxhY2VtZW50OworICAgICAgICBj
aGlsZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBp
cyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBk
b2VzIG5vdAogICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0gICAgICAgIEFTU0VSVCht
X3JlcGxhY2VtZW50c1tjaGlsZF0gPT0gTm9Ob2RlKTsKKyAgICAgICAgQVNTRVJUKG1fcmVwbGFj
ZW1lbnRzW2NoaWxkLmluZGV4KCldID09IE5vTm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
YWRkUmVmKQogICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CkBAIC0xNTA1LDkgKzE1
MTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiwgc2hvdWxkR2VuZXJhdGUp
OwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMywgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihu
b2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsK
KyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwg
c2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXNob3Vs
ZEdlbmVyYXRlKQpAQCAtMTYwMiwzNyArMTYwOSwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9k
ZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpOworICAgICAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwg
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5v
ZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQy
KCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSAmJiBnZXRC
eVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkgIT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIG5vZGUub3AgPSBQdXRCeVZhbEFs
aWFzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlv
bihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgIGlmIChj
aGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNo
aWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgICAgICAgICAgaWYg
KGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9uKCksIG5vZGUuY2hpbGQxKCkp
KQorICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9u
KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0
aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbik7Ci0gICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUu
Y2hpbGQxKCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0
b3JhZ2U6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciwgbm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxk
MSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQu
aAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29y
ZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCi0jaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC0xMDYsNiArMTA2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQo
aW5kZXgpOwogICAgICAgICB9CiAgICAgfQorICAgIHZvaWQgdXNlKE5vZGVVc2UgY2hpbGQpCisg
ICAgeworICAgICAgICB1c2UoY2hpbGQuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgfQogCiAgICAg
dW5zaWduZWQgaGlnaFdhdGVybWFyaygpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NzUsNyArODc1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUg
bGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgogICAgICAgICBOb2RlJiBsYXN0Tm9k
ZSA9IGF0KGxhc3ROb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJh
bmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRl
eCA6IE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIGxhc3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0
Tm9kZS5jaGlsZDEoKS5pbmRleCgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6
IE5vTm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1i
ZXIoTm9kZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125517</attachid>
            <date>2012-02-04 23:37:59 -0800</date>
            <delta_ts>2012-02-05 15:12:20 -0800</delta_ts>
            <desc>64-bit works</desc>
            <filename>nodeuse_patch_3.diff</filename>
            <type>text/plain</type>
            <size>96923</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxMi0wMi0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRydzIGNoaWxkIHJlZmVyZW5jZXMgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyIHNob3VsZCBo
YXZlIHJvb20gZm9yIHR5cGUgaW5mb3JtYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Nzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNTLiAgVGhpcyBpcyB0
aGUgc3RhcnQgb2YgYSBwYWluZnVsIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpmb3JOb2Rl
KToKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjp0b0ludDMyKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6YWRkVmFyQXJnQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAqIGRmZy9ERkdDb21tb24u
aDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgIChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJl
Zik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRlcmVmKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmNsZWFyQW5kRGVyZWZDaGlsZDIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbGVhckFu
ZERlcmVmQ2hpbGQzKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hl
Y2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjaGlsZDMpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpcnN0Q2hpbGQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpkdW1wQ2hpbGRyZW4pOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZn
L0RGR05vZGVSZWZlcmVuY2VCbG9iLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAg
KE5vZGVSZWZlcmVuY2VCbG9iKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxv
Yjo6Tm9kZVJlZmVyZW5jZUJsb2IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VC
bG9iOjpjaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxk
MSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkMik6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkMyk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVSZWZlcmVuY2VCbG9iOjpmaXJzdENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
UmVmZXJlbmNlQmxvYjo6c2V0Rmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVJl
ZmVyZW5jZUJsb2I6Om51bUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJl
bmNlQmxvYjo6c2V0TnVtQ2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVXNlLmg6IEFk
ZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKE5vZGVVc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVVc2U6Ok5vZGVVc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OmluZGV4
VW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVXNlOjppbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZVVzZTo6c2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVV
c2U6OnVzZUtpbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OnNldFVzZUtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlVXNlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGVVc2U6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVXNlOjpt
YWtlV29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkRGRzo6b3BlcmF0b3IhPSk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjp2b3RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4
dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpjYW5vbmljYWxpemUpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnN0YXJ0SW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtU3Vic3RpdHV0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RG
R1Njb3JlQm9hcmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjp1c2UpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhblJldXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6dXNlKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZGV0ZWN0UGVlcEhvbGVCcmFuY2gpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjpJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OkpTVmFsdWVPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdG9yYWdlT3BlcmFuZDo6U3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOjpTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6
OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNl
bGxPcGVyYW5kOjpTcGVjdWxhdGVDZWxsT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQ6OlNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2hOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RF
cSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKwogMjAxMi0wMi0wNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAx
MDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJlZ2luXTsKICAgICB9CiAgICAgCisgICAg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gZm9yTm9kZShub2RlVXNlLmluZGV4KCkpOworICAgIH0KKyAgICAKICAgICAvLyBDYWxs
IHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFs
dWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNo
b3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4ZWN1dGlvbi4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
MDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOwogICAg
ICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09IFBoaSkgewogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRl
eCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzksNyArMTc5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wID09
IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKTsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tz
LApAQCAtMjE5LDcgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSYgZmx1
c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAgICAgICAgIGlm
IChmbHVzaENoaWxkLm9wID09IFBoaSkgewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5k
KSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAg
ICAgICAgICAgICAgICB9CkBAIC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQo
bm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNo
aWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwpAQCAtMzI3LDcgKzMy
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAKICAgICAgICAgaWYg
KG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGls
ZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRzIGJveGVkIGFzIEpTVmFsdWVzLgogICAg
ICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7CkBAIC01NzIsNyArNTcyLDcgQEAgcHJp
dmF0ZToKICAgICB9CiAgICAgdm9pZCBhZGRWYXJBcmdDaGlsZChOb2RlSW5kZXggY2hpbGQpCiAg
ICAgewotICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAg
ICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChOb2RlVXNlKGNoaWxkKSk7CiAg
ICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncysrOwogICAgIH0KICAgICAKQEAgLTIyNDEsOSArMjI0
MSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAg
ICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFr
aW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCiAgICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmll
ZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRM
b2NhbHMKICAgICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFi
bGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgIEFTU0VS
VChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9n
cmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCldLnZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3JhcGhbbV9ncmFwaFt2YWx1ZUluUHJlZGVj
ZXNzb3JdLmNoaWxkMSgpLmluZGV4KCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3Zh
bHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CisgICAgICAgICAgICAgICAgdmFsdWVJblByZWRl
Y2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpLmluZGV4KCk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIEZvdW5kIEAldS5cbiIsIHZhbHVl
SW5QcmVkZWNlc3Nvcik7CkBAIC0yMjY2LDExICsyMjY2LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYodmFsdWVJ
blByZWRlY2Vzc29yKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHBoaU5vZGUt
PmNoaWxkMSgpID09IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEo
KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAg
ICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRy
eS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHBo
aU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IE5vZGVVc2UodmFsdWVJblBy
ZWRlY2Vzc29yKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1f
cGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAg
LTIyNzgsMTEgKzIyNzgsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNr
KCkKICNlbmRpZgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09IE5vTm9kZSkgeworICAgICAgICAgICAg
aWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1LT5j
aGlsZDIgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRp
ZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IHZhbHVl
SW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDIo
KSA9IE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJl
biBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1w
Q2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyOTAsMTEgKzIyOTAsMTEgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IE5v
Tm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMoKSkgewogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYo
IiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJ
blByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVu
LmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBwaGlO
b2RlLT5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAg
cHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIzMTQsOSArMjMxNCw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICBp
ZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQ
aGkpOwogCi0gICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHBo
aU5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgbmV3UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5j
aGlsZDIgPSBwaGlOb2RlLT5jaGlsZDIoKTsKLSAgICAgICAgICAgIG5ld1BoaU5vZGUuY2hpbGRy
ZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS0+Y2hpbGQzKCk7CisgICAgICAgICAgICBuZXdQaGlO
b2RlLmNoaWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47CiAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBwcmludGYoIiAgICAgIENoaWxkcmVu
IG9mIEAldTogIiwgbmV3UGhpKTsKQEAgLTIzMjQsOSArMjMyMiw5IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICBwcmludGYoIi5cbiIpOwogI2Vu
ZGlmCiAKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IG5ld1Bo
aTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5Q
cmVkZWNlc3NvcjsKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9
IE5vTm9kZTsKKyAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gTm9kZVVz
ZShuZXdQaGkpOworICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBOb2Rl
VXNlKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5j
aGlsZDMoKSA9IE5vZGVVc2UoTm9Ob2RlKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIHByaW50ZigiICAgICAgQ2hpbGRyZW4gb2YgQCV1
OiAiLCBlbnRyeS5tX3BoaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDExIEBAIHN0cnVjdCBOb2RlSW5kZXhU
cmFpdHMgewogICAgIH0KIH07CiAKK2VudW0gVXNlS2luZCB7CisgICAgVW50eXBlZFVzZSwKKyAg
ICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51
bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgor
fTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MywxNiArMTYzLDE2IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4
IG5vZGVJbmRleCwgQ28KICAgICAgICAgICAgICAgICBwcmludGYoIiwgIik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBw
cmludGYoIkAldSIsIG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgIHBy
aW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0uaW5kZXgoKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSAhPSBOb05vZGUpCi0g
ICAgICAgICAgICBwcmludGYoIkAldSIsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBpZiAobm9k
ZS5jaGlsZDIoKSAhPSBOb05vZGUpCi0gICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5j
aGlsZDIoKSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkMygpICE9IE5vTm9kZSkKLSAgICAgICAg
ICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMygpKTsKLSAgICAgICAgaGFzUHJpbnRlZCA9
IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMSgpKQor
ICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMigpKQorICAgICAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkpCisgICAgICAg
ICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMoKS5pbmRleCgpKTsKKyAgICAgICAgaGFz
UHJpbnRlZCA9ICEhbm9kZS5jaGlsZDEoKTsKICAgICB9CiAKICAgICBpZiAobm9kZS5oYXNBcml0
aE5vZGVGbGFncygpKSB7CkBAIC0zMDUsMjAgKzMwNSwyMCBAQCB2b2lkIEdyYXBoOjpkdW1wKENv
ZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICAgICAgICAgICBfY2hpbGRJZHgrKykgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIHRo
aW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElkeF0pOyAgICAgICAgICAgICAgICAgXAog
ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKF9ub2RlLmNoaWxkMSgpID09IE5vTm9k
ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VS
VChfbm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICAgICAgICAmJiBfbm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOyAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDEoKSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCgh
X25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAg
ICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKF9ub2RlLmNoaWxkMigp
ID09IE5vTm9kZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
ICAgIEFTU0VSVChfbm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOyAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDIoKSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hp
bGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMigp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgaWYgKF9ub2RlLmNoaWxkMygpID09IE5vTm9kZSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGlsZDMoKSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxNSBAQCBzdHJ1Y3Qg
UmVzb2x2ZUdsb2JhbERhdGEgewogLy8gTm9kZXMgdGhhdCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0
aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNzIEdyYXBoIDogcHVibGljIFZlY3RvcjxO
b2RlLCA2ND4gewogcHVibGljOgorICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2ND46Om9wZXJhdG9y
W107CisgICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6YXQ7CisgICAgCisgICAgTm9kZSYgb3Bl
cmF0b3JbXShOb2RlVXNlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0K
KyAgICBjb25zdCBOb2RlJiBvcGVyYXRvcltdKE5vZGVVc2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1
cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIAorICAgIE5vZGUmIGF0KE5vZGVVc2Ugbm9k
ZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIGNvbnN0IE5vZGUmIGF0
KE5vZGVVc2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQor
ICAgIAogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCiAgICAgdm9pZCBy
ZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC03OSwzNSArODgsNDMgQEAgcHVibGlj
OgogICAgICAgICBpZiAobm9kZS5yZWYoKSkKICAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJ
bmRleCk7CiAgICAgfQorICAgIHZvaWQgcmVmKE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAg
ICAgIHJlZihub2RlVXNlLmluZGV4KCkpOworICAgIH0KICAgICAKICAgICB2b2lkIGRlcmVmKE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoYXQobm9kZUluZGV4KS5kZXJl
ZigpKQogICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlSW5kZXgpOwogICAgIH0KKyAgICB2
b2lkIGRlcmVmKE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIGRlcmVmKG5vZGVVc2Uu
aW5kZXgoKSk7CisgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2Rl
JiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID09
IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBkZXJlZihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSk7Ci0gICAgICAgIG5v
ZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gTm9Ob2RlOworICAgICAgICBkZXJlZihub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IE5vZGVVc2UoKTsKICAg
ICB9CiAKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDIoTm9kZSYgbm9kZSkKICAgICB7Ci0g
ICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9PSBOb05vZGUpCisgICAgICAg
IGlmICghbm9kZS5jaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYo
bm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMiA9IE5vTm9kZTsKKyAgICAgICAgZGVyZWYobm9kZS5jaGlsZDIoKSk7CisgICAgICAg
IG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBOb2RlVXNlKCk7CiAgICAgfQogCiAgICAgdm9pZCBj
bGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5j
aGlsZHJlbi5maXhlZC5jaGlsZDMgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQz
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGRyZW4uZml4
ZWQuY2hpbGQzKTsKLSAgICAgICAgbm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBOb05vZGU7
CisgICAgICAgIGRlcmVmKG5vZGUuY2hpbGQzKCkpOworICAgICAgICBub2RlLmNoaWxkcmVuLmNo
aWxkMygpID0gTm9kZVVzZSgpOwogICAgIH0KIAogICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25h
bCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5n
LiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTI1NSw3ICsyNzIsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKLSAgICBWZWN0
b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKKyAgICBWZWN0b3I8Tm9kZVVzZSwg
MTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAgICAgVmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0
b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZl
R2xvYmFsRGF0YTsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCA4PiBtX2FyZ3VtZW50czsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDEw
NjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3Miw3IEBAIHB1YmxpYzoKICAgICAvLyBIZWxwZXIgbWV0
aG9kcyB0byBnZXQgcHJlZGljdGlvbnMKICAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24o
Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWN0aW9uKCk7IH0KICAgICBQcmVkaWN0ZWRU
eXBlIGdldFByZWRpY3Rpb24oTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gZ2V0UHJlZGlj
dGlvbihncmFwaCgpW25vZGVJbmRleF0pOyB9CisgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0
aW9uKE5vZGVVc2Ugbm9kZVVzZSkgeyByZXR1cm4gZ2V0UHJlZGljdGlvbihub2RlVXNlLmluZGV4
KCkpOyB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHZvaWQqIGFkZHJlc3NPZkRvdWJs
ZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisjaW5jbHVkZSAiREZHTm9kZVJlZmVyZW5jZUJsb2IuaCIKICNpbmNsdWRlICJERkdPcGVy
YW5kcy5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2luY2x1ZGUgIkpT
VmFsdWUuaCIKQEAgLTM0NywzNiArMzQ4LDMzIEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2RlKE5v
ZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAg
ICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIs
IGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJl
ZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7
CiAgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7Ci0gICAgICAgIGNoaWxkcmVu
LmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0g
Y2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGlt
bWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3Ap
CiAgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIGNoaWxkcmVuKE5v
ZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1f
cmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKICAgICAgICAgLCBt
X3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5v
ZGVIYXNWYXJBcmdzKSk7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsK
LSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOwotICAgICAgICBjaGlsZHJl
bi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9k
ZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgogICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAg
ICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBjaGlsZHJlbihOb2RlUmVmZXJl
bmNlQmxvYjo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50
KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtMzg0LDE1ICszODIsMTMg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKLSAgICAgICAgY2hp
bGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGls
ZDIgPSBjaGlsZDI7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IGNoaWxkMzsKICAg
ICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVy
IG9mIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBOb2RlKFZhckFyZ1Rh
ZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKICAgICAg
ICAgOiBvcChvcCkKICAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgICAgICwg
Y2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OlZhcmlhYmxlLCBmaXJzdENoaWxkLCBudW1DaGls
ZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFs
dWUpCkBAIC00MDAsOCArMzk2LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGlj
dGlvbihQcmVkaWN0Tm9uZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJB
cmdzKTsKLSAgICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7
Ci0gICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuID0gbnVtQ2hpbGRyZW47CiAg
ICAgfQogCiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpAQCAtODQ1LDQyICs4MzksNDIgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gIS0tbV9yZWZDb3VudDsKICAgICB9CiAgICAgCi0g
ICAgTm9kZUluZGV4IGNoaWxkMSgpCisgICAgTm9kZVVzZSBjaGlsZDEoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAgICByZXR1cm4gY2hpbGRy
ZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxKCk7CiAgICAg
fQogICAgIAogICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBj
aGVjayBvbiB0aGUgZmlyc3QgY2hpbGQKICAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNr
IG9uIHRoZSBvcGNvZGUuIFVzZSB0aGlzIHdpdGggY2FyZSBhbmQKICAgICAvLyBhdm9pZCBpdCBp
ZiBwb3NzaWJsZS4KLSAgICBOb2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICBOb2RlVXNl
IGNoaWxkMVVuY2hlY2tlZCgpCiAgICAgewotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQu
Y2hpbGQxOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQxVW5jaGVja2VkKCk7CiAgICAg
fQogCi0gICAgTm9kZUluZGV4IGNoaWxkMigpCisgICAgTm9kZVVzZSBjaGlsZDIoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAgICByZXR1cm4g
Y2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7
CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMygpCisgICAgTm9kZVVzZSBjaGlsZDMoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAgICAgICByZXR1cm4gY2hpbGRyZW4uY2hp
bGQzKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGZpcnN0Q2hpbGQoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gY2hpbGRy
ZW4udmFyaWFibGUuZmlyc3RDaGlsZDsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpcnN0Q2hp
bGQoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOwotICAgICAgICByZXR1cm4gY2hpbGRy
ZW4udmFyaWFibGUubnVtQ2hpbGRyZW47CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5udW1DaGls
ZHJlbigpOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24oKQpAQCAt
MTAzNCwzMSArMTAyOCwyMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgdm9pZCBkdW1wQ2hp
bGRyZW4oRklMRSogb3V0KQogICAgIHsKLSAgICAgICAgaWYgKGNoaWxkMSgpID09IE5vTm9kZSkK
KyAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZnBy
aW50ZihvdXQsICJAJXUiLCBjaGlsZDEoKSk7Ci0gICAgICAgIGlmIChjaGlsZDIoKSA9PSBOb05v
ZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiQCV1IiwgY2hpbGQxKCkuaW5kZXgoKSk7CisgICAg
ICAgIGlmICghY2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZwcmludGYo
b3V0LCAiLCBAJXUiLCBjaGlsZDIoKSk7Ci0gICAgICAgIGlmIChjaGlsZDMoKSA9PSBOb05vZGUp
CisgICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDIoKS5pbmRleCgpKTsKKyAgICAg
ICAgaWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZnByaW50Zihv
dXQsICIsIEAldSIsIGNoaWxkMygpKTsKKyAgICAgICAgZnByaW50ZihvdXQsICIsIEAldSIsIGNo
aWxkMygpLmluZGV4KCkpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGVudW0gdmFsdWUgZGVz
Y3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8vIFVz
ZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBp
bXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW47Ci0gICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuICgwIGZvciBubyBjaGls
ZCkuCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgTm9kZUluZGV4
IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7Ci0gICAgICAgIH0gZml4ZWQ7Ci0gICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENoaWxkOwotICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtQ2hpbGRyZW47Ci0gICAgICAgIH0gdmFyaWFibGU7Ci0gICAgfSBjaGlsZHJlbjsKKyAg
ICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFi
bGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KKyAgICBOb2RlUmVmZXJlbmNlQmxvYiBjaGlsZHJl
bjsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxs
IGxvY2F0aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVSZWZlcmVuY2VCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxvYi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKKyNkZWZpbmUgREZH
Tm9kZVJlZmVyZW5jZUJsb2JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR05v
ZGVVc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBOb2Rl
UmVmZXJlbmNlQmxvYiB7CitwdWJsaWM6CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGVudW0g
S2luZCB7CisgICAgICAgIEZpeGVkLAorICAgICAgICBWYXJpYWJsZQorICAgIH07CisjZW5kaWYK
KworICAgIE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2luZCkKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgIDogbV9raW5kKGtpbmQpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChraW5k
ID09IFZhcmlhYmxlKSB7CisgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBV
SU5UX01BWDsKKyAgICAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9IFVJTlRfTUFY
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2lu
ZCwgTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIDogbV9raW5kKEZpeGVkKQorI2VuZGlmCisg
ICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gRml4ZWQpOworICAgICAg
ICBpbml0aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgIH0KKyAgICAKKyAgICBO
b2RlUmVmZXJlbmNlQmxvYihLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVk
IG51bUNoaWxkcmVuKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgOiBtX2tpbmQoVmFy
aWFibGUpCisjZW5kaWYKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9
PSBWYXJpYWJsZSk7CisgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CisgICAgICAg
IHNldE51bUNoaWxkcmVuKG51bUNoaWxkcmVuKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgTm9k
ZVVzZSYgY2hpbGQodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
Myk7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOworICAgICAgICByZXR1cm4gbV93
b3Jkc1tpXTsKKyAgICB9ICAgIAorICAgIAorICAgIE5vZGVVc2UmIGNoaWxkKHVuc2lnbmVkIGkp
CisgICAgeworICAgICAgICBBU1NFUlQoaSA8IDMpOworICAgICAgICBBU1NFUlQobV9raW5kID09
IEZpeGVkKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CisgICAgfQorICAgIAorICAgIE5v
ZGVVc2UgY2hpbGQxKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCk7IH0KKyAgICBOb2RlVXNlIGNo
aWxkMigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkKDEpOyB9CisgICAgTm9kZVVzZSBjaGlsZDMoKSBj
b25zdCB7IHJldHVybiBjaGlsZCgyKTsgfQorCisgICAgTm9kZVVzZSYgY2hpbGQxKCkgeyByZXR1
cm4gY2hpbGQoMCk7IH0KKyAgICBOb2RlVXNlJiBjaGlsZDIoKSB7IHJldHVybiBjaGlsZCgxKTsg
fQorICAgIE5vZGVVc2UmIGNoaWxkMygpIHsgcmV0dXJuIGNoaWxkKDIpOyB9CisgICAgCisgICAg
Tm9kZVVzZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRzWzBdOyB9Cisg
ICAgCisgICAgdm9pZCBpbml0aWFsaXplKE5vZGVVc2UgY2hpbGQxLCBOb2RlVXNlIGNoaWxkMiwg
Tm9kZVVzZSBjaGlsZDMpCisgICAgeworICAgICAgICBjaGlsZCgwKSA9IGNoaWxkMTsKKyAgICAg
ICAgY2hpbGQoMSkgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNo
aWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoTm9kZVVz
ZShjaGlsZDEpLCBOb2RlVXNlKGNoaWxkMiksIE5vZGVVc2UoY2hpbGQzKSk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9r
aW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29y
ZDsKKyAgICB9CisgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93b3Jk
c1swXS5tX2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgbnVtQ2hpbGRyZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBW
YXJpYWJsZSk7CisgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CisgICAg
fQorICAgIHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgewor
ICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93b3Jkc1sxXS5t
X2VuY29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBO
b2RlVXNlIG1fd29yZHNbM107CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEtpbmQgbV9raW5k
OworI2VuZGlmCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHTm9kZVVzZV9oCisjZGVmaW5lIERGR05vZGVVc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVS
ZWZlcmVuY2VCbG9iOworCitjbGFzcyBOb2RlVXNlIHsKK3B1YmxpYzoKKyAgICBOb2RlVXNlKCkK
KyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKE5vTm9kZSwgVW50eXBlZFVzZSkpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBOb2RlVXNlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIFVudHlwZWRV
c2UpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZVVzZShOb2RlSW5kZXggbm9kZUluZGV4
LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2Rl
SW5kZXgsIHVzZUtpbmQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGluZGV4
VW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9Cisg
ICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKKyAgICB9CisgICAg
dm9pZCBzZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgbV9lbmNv
ZGVkV29yZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICB9CisgICAgCisg
ICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAmICgoMSA8PCBzaGlm
dCgpIC0gMSkpOworICAgICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRVc2VLaW5kKFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKGluZGV4KCksIHVzZUtpbmQpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNr
ZWQoKSAhPSBOb05vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFp
c1NldCgpOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE5vZGVVc2Ugb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA9PSBvdGhlci5tX2VuY29kZWRX
b3JkOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oTm9kZVVzZSBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkICE9IG90aGVyLm1fZW5jb2RlZFdvcmQ7
CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOb2RlUmVmZXJlbmNlQmxvYjsK
KyAgICAKKyAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CisgICAgCisg
ICAgc3RhdGljIGludDMyX3QgbWFrZVdvcmQoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1
c2VLaW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0
YXRpY19jYXN0PGludDMyX3Q+KG5vZGVJbmRleCkgPDwgc2hpZnQoKSkgPj4gc2hpZnQoKSkpID09
IG5vZGVJbmRleCk7CisgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExh
c3RVc2VLaW5kKTsKKyAgICAgICAgQVNTRVJUKExhc3RVc2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkp
KTsKKyAgICAgICAgcmV0dXJuIChub2RlSW5kZXggPDwgc2hpZnQoKSkgfCB1c2VLaW5kOworICAg
IH0KKyAgICAKKyAgICBpbnQzMl90IG1fZW5jb2RlZFdvcmQ7Cit9OworCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KE5vZGVVc2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBy
ZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpID09IG5vZGVJbmRleDsKK30KK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZVVzZSBub2RlVXNlKQorewor
ICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworfQoraW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShOb2RlVXNlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgp
Cit7CisgICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5kZXg7Cit9
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVVc2Ugbm9k
ZVVzZSkKK3sKKyAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRl
eDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdOb2RlVXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsNyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
aXRoQWRkOgogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAoaXNOb3RO
ZWdaZXJvKG5vZGUuY2hpbGQxKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpKSkKKyAg
ICAgICAgICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05v
dE5lZ1plcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAm
PSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwpAQCAt
MTU2LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUuY2hpbGQx
KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgIGlmIChpc05vdFpl
cm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRl
eCgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwpAQCAtMjEwLDEzICsyMTAsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBo
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMigpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUu
Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdz
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VB
cml0aE5vZGVGbGFncyhmbGFncyk7CiAgICAgICAgICAgICB9CkBAIC02NzYsMjEgKzY3NiwyMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGVJbmRleCBu
b2RlSW5kZXgsIFZhcmlhYmxlQWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdCkKKyAgICB2b2lkIHZv
dGUoTm9kZVVzZSBub2RlVXNlLCBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3QpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgeworICAgICAgICBz
d2l0Y2ggKG1fZ3JhcGhbbm9kZVVzZV0ub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVy
OgogICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMy
OgogICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZVVzZSA9IG1fZ3Jh
cGhbbm9kZVVzZV0uY2hpbGQxKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
bV9ncmFwaFtub2RlSW5kZXhdLm9wID09IEdldExvY2FsKQotICAgICAgICAgICAgbV9ncmFwaFtu
b2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgICAgIGlm
IChtX2dyYXBoW25vZGVVc2VdLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgbV9ncmFwaFtu
b2RlVXNlXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHZvdGUoTm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFs
bG90KQpAQCAtNzAxLDEzICs3MDEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2Rl
KQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQy
KCkgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYg
KG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsK
ICAgICB9CkBAIC04MzUsMTMgKzgzNSwxMyBAQCBwcml2YXRlOgogICAgICAgICB9IHdoaWxlICht
X2NoYW5nZWQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCisgICAgdm9pZCB0b0RvdWJsZShOb2RlVXNlIG5vZGVVc2UpCiAgICAgewotICAgICAg
ICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKKyAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZVVzZV0ub3AgPT0gVmFsdWVUb051bWJlcikgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIHByaW50ZigiICBAJXUg
LT4gVmFsdWVUb0RvdWJsZSIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBwcmludGYoIiAgQCV1
IC0+IFZhbHVlVG9Eb3VibGUiLCBub2RlVXNlLmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgICAg
ICBtX2dyYXBoW25vZGVJbmRleF0ub3AgPSBWYWx1ZVRvRG91YmxlOworICAgICAgICAgICAgbV9n
cmFwaFtub2RlVXNlXS5vcCA9IFZhbHVlVG9Eb3VibGU7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTk3Nyw4ICs5NzcsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0g
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSAhPSBOb05vZGUgJiYgbV9ncmFwaFtub2RlLmNo
aWxkMygpXS5vcCA9PSBOb3ApCi0gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5maXhlZC5j
aGlsZDMgPSBOb05vZGU7CisgICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMygpICYmIG1fZ3Jh
cGhbbm9kZS5jaGlsZDMoKV0ub3AgPT0gTm9wKQorICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRy
ZW4uY2hpbGQzKCkgPSBOb2RlVXNlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgpAQCAtMTAwNSwxMyArMTAwNSwxNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoW25vZGVJ
bmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3Jh
cGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhb
bm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCA9PSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAgICBub2RlSW5kZXgg
PSBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlSW5kZXggPSBt
X2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBub2RlSW5kZXg7CiAgICAgfQorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZVVz
ZSBub2RlVXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShub2RlVXNlLmlu
ZGV4VW5jaGVja2VkKCkpOworICAgIH0KICAgICAKICAgICAvLyBDb21wdXRlcyB3aGVyZSB0aGUg
c2VhcmNoIGZvciBhIGNhbmRpZGF0ZSBmb3IgQ1NFIHNob3VsZCBzdGFydC4gRG9uJ3QgY2FsbAog
ICAgIC8vIHRoaXMgZGlyZWN0bHk7IGNhbGwgc3RhcnRJbmRleCgpIGluc3RlYWQgYXMgaXQgZG9l
cyBsb2dnaW5nIGluIGRlYnVnIG1vZGUuCkBAIC0xMDYxLDcgKzEwNjUsMTAgQEAgcHJpdmF0ZToK
ICAgICBOb2RlSW5kZXggc3RhcnRJbmRleCgpCiAgICAgewogICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIHJldHVybiBzdGFydEluZGV4Rm9yQ2hp
bGRyZW4obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgIHJldHVybiBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oCisgICAgICAgICAgICBub2RlLmNoaWxk
MSgpLmluZGV4VW5jaGVja2VkKCksCisgICAgICAgICAgICBub2RlLmNoaWxkMigpLmluZGV4VW5j
aGVja2VkKCksCisgICAgICAgICAgICBub2RlLmNoaWxkMygpLmluZGV4VW5jaGVja2VkKCkpOwog
ICAgIH0KICAgICAKICAgICBOb2RlSW5kZXggZW5kSW5kZXhGb3JQdXJlQ1NFKCkKQEAgLTEyMDcs
NyArMTIxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIo
KSA9PSB2YXJOdW1iZXIgJiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pID09IGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUu
Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4
KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTIzNSw3ICsxMjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAm
JiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRleCgpOwogICAgICAgICAgICAgICAgIC8vIFdl
IG11c3QgYXNzdW1lIHRoYXQgdGhlIFB1dEJ5VmFsIHdpbGwgY2xvYmJlciB0aGUgbG9jYXRpb24g
d2UncmUgZ2V0dGluZyBmcm9tLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8g
YmV0dGVyOyBpZiB3ZSBrbm93IHRoYXQgdGhlIFB1dEJ5VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJh
eSBvZiBhCiAgICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlW
YWwsIHRoZW4gd2Uga25vdyB0aGF0IHRoZXkgd29uJ3QgY2xvYmJlciBlYWNoIG90aGVyLgpAQCAt
MTMyOCw3ICsxMzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVt
YmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IGNoaWxkMSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xNDQyLDIyICsxNDQ5LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2Rl
SW5kZXgmIGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCisgICAgdm9pZCBwZXJmb3JtU3Vic3Rp
dHV0aW9uKE5vZGVVc2UmIGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCiAgICAgewogICAgICAg
ICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgotICAgICAgICBp
ZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIWNoaWxkKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2Vt
ZW50LgotICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBtX3JlcGxhY2VtZW50c1tjaGls
ZF07CisgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxk
LmluZGV4KCldOwogICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgY2hpbGQgPSByZXBsYWNlbWVudDsKKyAgICAg
ICAgY2hpbGQuc2V0SW5kZXgocmVwbGFjZW1lbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhl
cmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1l
bnQgZG9lcyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NF
UlQobV9yZXBsYWNlbWVudHNbY2hpbGRdID09IE5vTm9kZSk7CisgICAgICAgIEFTU0VSVChtX3Jl
cGxhY2VtZW50c1tjaGlsZC5pbmRleCgpXSA9PSBOb05vZGUpOwogICAgICAgICAKICAgICAgICAg
aWYgKGFkZFJlZikKICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOwpAQCAtMTUwNSw5
ICsxNTEyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRl
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9k
ZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEsIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBl
cmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIsIHNob3VsZEdlbmVy
YXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhl
ZC5jaGlsZDMsIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b24obm9kZS5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0
ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQz
KCksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFz
aG91bGRHZW5lcmF0ZSkKQEAgLTE2MDIsMzcgKzE2MDksMzcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJl
KG5vZGUpKQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1p
bmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4
KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElzUHVy
ZShub2RlKSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNo
aWxkMigpKSAhPSBOb05vZGUpCisgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYg
Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxk
MigpLmluZGV4KCkpICE9IE5vTm9kZSkKICAgICAgICAgICAgICAgICBub2RlLm9wID0gUHV0QnlW
YWxBbGlhczsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWlu
YXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBp
ZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAg
IGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5jdGlvbigpLCBub2RlLmNoaWxk
MSgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5j
dGlvbigpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBi
YXNlUHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwogICAg
ICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJl
ZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihu
b2RlLmNoaWxkMSgpLCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikpOworICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0UHJvcGVy
dHlTdG9yYWdlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdl
TG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4
KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0g
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5j
aGlsZDEoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJv
YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJv
YXJkLmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2NvcmVCb2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAotI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5oPgorI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApAQCAtMTA2LDYgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ZyZWUuYXBw
ZW5kKGluZGV4KTsKICAgICAgICAgfQogICAgIH0KKyAgICB2b2lkIHVzZShOb2RlVXNlIGNoaWxk
KQorICAgIHsKKyAgICAgICAgdXNlKGNoaWxkLmluZGV4VW5jaGVja2VkKCkpOworICAgIH0KIAog
ICAgIHVuc2lnbmVkIGhpZ2hXYXRlcm1hcmsoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTA2
Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDcgKzM2MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEpTVmFsdWUoTm9kZUkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVWYWx1ZVRvTnVtYmVyKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGlzS25vd25OdW1lcmljKG5v
ZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkpIHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIG1faml0
Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMzcxLDggKzM3MSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAKLSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0gICAg
QVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICBBU1NFUlQoIWlzTnVt
YmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CiAgICAgCiAgICAgR1BSUmVnIGpz
VmFsdWVHcHIgPSBvcDEuZ3ByKCk7CiAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKQEAg
LTQwNCw5ICs0MDQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVl
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUm
IG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwor
ICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAg
IAotICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CiAgICAgICAgIEludGVnZXJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKQEAgLTUxMiwxMyArNTEyLDEzIEBAIEpJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklU
OjpjYWNoZWQKICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJ
ZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IE5vZGVVc2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
KQogewogICAgIAogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7
CiAKLSAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlSW5kZXgsIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKKyAgICB3cml0ZUJhcnJpZXIo
YmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vz
cywgc2NyYXRjaEdQUik7CiAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQ
Uik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQu
c3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSLCAwKSk7CkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFBy
b3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rp
b25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3Qoc3Rv
cmVXaXRoUGF0Y2gubGFiZWwoKSksIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhf
dD4oYmFzZUdQUiksIHNhZmVDYXN0PGludDhfdD4odmFsdWVHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+
KHNjcmF0Y2hHUFIpKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwo
Tm9kZVVzZSBvcGVyYW5kLCBib29sIGludmVydCkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmco
dGhpcywgb3BlcmFuZCk7CiAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKQEAgLTU2NCwx
MyArNTY0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAg
ICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgIAotICAgIGlmICghaXNLbm93
bkNlbGwob3BlcmFuZCkpCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKQog
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC50ZXN0OChpbnZlcnQgPyBKSVRDb21waWxl
cjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKICAgICAKLSAg
ICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVy
YW5kLmluZGV4KCkpKSB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CiAgICAgICAgIAogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTU4Niw3
ICs1ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJv
b2wgaW52ZXJ0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwoTm9kZVVzZSBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29s
IGludmVydCkKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsK
ICAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKQEAg
LTYwNywxMyArNjA3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgIAotICAgIGlmICgh
aXNLbm93bkNlbGwob3BlcmFuZCkpCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4
KCkpKQogICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVz
dDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
LCB0YWtlbik7CiAgICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgeworICAgIGlm
ICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkgewogICAgICAgICBhZGRCcmFuY2gobV9q
aXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgICAgIAogICAgICAgICBub3RDZWxsLmxpbmsoJm1f
aml0KTsKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBoCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKIH0K
IAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiBu
b2RlLCBOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCitib29sIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUmIG5vZGUsIE5vZGVVc2Ugb3BlcmFuZCwg
Ym9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBl
ZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKQEAg
LTY3Miw3ICs2NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlm
IChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihu
b2RlLmNoaWxkMigpKSkgeworICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgp
LmluZGV4KCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsK
ICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAKQEAgLTY5MCwxNCArNjkwLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAg
ICAgYXJnMi51c2UoKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4
KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJn
MkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOwog
ICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpIHsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2Vu
KTsKICAgICAKICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKQEAgLTcyMyw3ICs3
MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmIChpc0tub3du
Tm90SW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxk
MigpKSkgeworICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkp
IHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICAKQEAgLTc0MiwxNCArNzQyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51
c2UoKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkK
KyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAg
ICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBpZiAoIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIG1faml0LmNvbXBh
cmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgIAotICAgICAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMigpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7CiAg
ICAgCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC03OTUsNyArNzk1LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGFyZzEudXNl
KCk7CiAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGls
ZDEoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAoaXNLbm93bkNl
bGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmlu
ZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVu
dHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxs
LCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCBpbnZl
cnQgPyBub3RUYWtlbiA6IHRha2VuKTsKQEAgLTg0NCw3ICs4NDQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgYXJnMS51c2UoKTsKICAgICBhcmcyLnVz
ZSgpOwogICAgIAotICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3du
Q2VsbChub2RlLmNoaWxkMigpKSkgeworICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgp
LmluZGV4KCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAg
ICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5k
IHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0
IGJlIHN0cmljdGx5IGVxdWFsLgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENh
c2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcy
R1BSKTsKQEAgLTkxNywxMCArOTE3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUmIG5vZGUKICAgICAKICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0g
bm9kZS5vcCA9PSBDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3Q7CiAgICAgCi0gICAgTm9kZUluZGV4IGNhbGxlZU5vZGVJbmRleCA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07Ci0gICAgSlNWYWx1ZU9wZXJh
bmQgY2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJbmRleCk7CisgICAgTm9kZVVzZSBjYWxsZWVOb2Rl
VXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlTm9kZVVzZSk7CiAgICAgR1BS
UmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKLSAgICB1c2UoY2FsbGVlTm9kZUluZGV4KTsK
KyAgICB1c2UoY2FsbGVlTm9kZVVzZSk7CiAgICAgCiAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rp
b24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3Ig
dGhlCiAgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBh
cmUgdGhlIGFyZ3VtZW50cy4KQEAgLTkzMSwxMCArOTMxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGNh
bGxGcmFtZVNsb3QoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKICAgICAKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICBOb2RlSW5kZXggYXJnTm9k
ZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgp
ICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4
KTsKKyAgICAgICAgTm9kZVVzZSBhcmdOb2RlVXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0No
aWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcodGhpcywgYXJnTm9kZVVzZSk7CiAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3By
KCk7Ci0gICAgICAgIHVzZShhcmdOb2RlSW5kZXgpOworICAgICAgICB1c2UoYXJnTm9kZVVzZSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFyZ3VtZW50U2xvdChp
ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CkBAIC0xNDU5LDkgKzE0NTksOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihjbGFzc0luZm8pKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BS
LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
Y2xhc3NJbmZvKSkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BS
KTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CkBAIC0xNTEx
LDcgKzE1MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAKICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwot
ICAgIGlmIChpc0tub3duTm90TnVtYmVyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3ROdW1i
ZXIobm9kZS5jaGlsZDIoKSkpCisgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSB8fCBpc0tub3duTm90TnVtYmVyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdC5n
cHIoKSwgb3AxR1BSLCBvcDJHUFIpOwogICAgIGVsc2UKICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CkBAIC0xNTE5
LDE2ICsxNTE5LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1
bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3QoTm9kZVVzZSBub2RlVXNlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgYm9v
bCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlSW5kZXgpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJ
bmZvKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTUzNyw3ICsxNTM3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAg
IH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICAKQEAgLTE1NDgsNyArMTU0OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoaXNLbm93bkJvb2xlYW4o
bm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5p
bmRleCgpKSkgewogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7
CiAgICAgICAgIApAQCAtMTYyMywxNiArMTYyMywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTG9naWNhbE5vdChOCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2Rl
SW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVVc2Ugbm9kZVVz
ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7Ci0gICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlVXNlKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTE2NDAs
NyArMTY0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAg
ICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQ
Uiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxs
KSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgaWYgKG5vdFRha2Vu
ICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKQEAgLTE2NTYsNyArMTY1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSYgbm8KICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgo
KTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
ICAgICAKLSAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAo
aXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvOwogICAgICAgICAKICAgICAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKQEAg
LTE4NzksMTggKzE4NzksMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBCaXRYb3I6
Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAg
aWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJp
dE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSwgb3AyLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewog
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAg
ICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSksIG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTA5LDExICsxOTA5LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAg
ICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIo
KSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmLCByZXN1bHQuZ3By
KCkpOworICAgICAgICAgICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKIAogICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTIxNDcsMTIgKzIxNDcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ29tcGFy
ZUVxOgotICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAg
ICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAg
ICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUuY2hpbGQyKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAo
aXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgaWYg
KG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS5jaGlsZDEoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjYxLDcgKzI2NjEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBCcmFuY2g6Ci0gICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8
IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBp
ZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwpAQCAtMjcz
OCw3ICsyNzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4K
ICAgICAgICAgCi0gICAgICAgIGJvb2wgd2FzUHJpbWl0aXZlID0gaXNLbm93bk51bWVyaWMobm9k
ZS5jaGlsZDEoKSkgfHwgaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJv
b2wgd2FzUHJpbWl0aXZlID0gaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8
fCBpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDIyICs4NywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihO
b2RlJiBuCiAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hp
bGRJZHgrKykKICAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdKTsKICAgICB9IGVsc2UgewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9k
ZS5jaGlsZDEoKTsKLSAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAg
IEFTU0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9k
ZSk7CisgICAgICAgIE5vZGVVc2UgY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgaWYg
KCFjaGlsZDEpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDIoKSAmJiAhbm9kZS5j
aGlsZDMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdXNlKGNo
aWxkMSk7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIo
KTsKLSAgICAgICAgaWYgKGNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChu
b2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgIE5vZGVVc2UgY2hpbGQyID0gbm9kZS5j
aGlsZDIoKTsKKyAgICAgICAgaWYgKCFjaGlsZDIpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9k
ZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdXNl
KGNoaWxkMik7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9kZS5jaGls
ZDMoKTsKLSAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgIE5vZGVVc2UgY2hp
bGQzID0gbm9kZS5jaGlsZDMoKTsKKyAgICAgICAgaWYgKCFjaGlsZDMpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIHVzZShjaGlsZDMpOwogICAgIH0KQEAgLTI0OSw3ICsyNDksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjptYXJrQ2VsbENhcmQoTWFjcm9BCiAjZW5kaWYKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZh
bHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5k
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2
YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMikKIHsKICAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwogICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZUdQUik7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKEdQUlJlZwogICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CiAgICAg
VU5VU0VEX1BBUkFNKHVzZUtpbmQpOwogCi0gICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlSW5k
ZXgpKQorICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZVVzZS5pbmRleCgpKSkKICAgICAgICAg
cmV0dXJuOwogCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQpAQCAtMjgwLDcg
KzI4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICAgICAK
ICAgICBKSVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENoZWNr
ID0gZmFsc2U7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZUluZGV4KSAmJiAhaXNDZWxsUHJl
ZGljdGlvbihtX2ppdC5nZXRQcmVkaWN0aW9uKHZhbHVlSW5kZXgpKSkgeworICAgIGlmICghaXNL
bm93bkNlbGwodmFsdWVVc2UuaW5kZXgoKSkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0
UHJlZGljdGlvbih2YWx1ZVVzZS5pbmRleCgpKSkpIHsKICAgICAgICAgaGFkQ2VsbENoZWNrID0g
dHJ1ZTsKICAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQ
Uik7CiAgICAgfQpAQCAtMzI1LDE0ICszMjUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKEdQUlJlZwogI2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUlu
ZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQ
UiwgTm9kZVVzZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcg
c2NyYXRjaCkKIHsKICAgICBVTlVTRURfUEFSQU0ob3duZXIpOwogICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZUdQUik7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFVOVVNFRF9QQVJBTSh1
c2VLaW5kKTsKIAotICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZUluZGV4KSkKKyAgICBpZiAo
aXNLbm93bk5vdENlbGwodmFsdWVVc2UuaW5kZXgoKSkpCiAgICAgICAgIHJldHVybjsKIAogI2lm
IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiAjaWYgRU5BQkxFKEdHQykKICAg
ICBKSVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENoZWNrID0g
ZmFsc2U7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGlj
dGlvbihtX2ppdC5nZXRQcmVkaWN0aW9uKHZhbHVlSW5kZXgpKSkgeworICAgIGlmICghaXNLbm93
bkNlbGwodmFsdWVVc2UuaW5kZXgoKSkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJl
ZGljdGlvbih2YWx1ZVVzZS5pbmRleCgpKSkpIHsKICAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1
ZTsKICAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7
CiAgICAgfQpAQCAtMzgzLDcgKzM4Myw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlQ29tcGEKIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVTdHJpY3RF
cShOb2RlJiBub2RlLCBib29sIGludmVydCkKIHsKLSAgICBpZiAoIWludmVydCAmJiAoaXNLbm93
bk51bWVyaWMobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkp
KQorICAgIGlmICghaW52ZXJ0ICYmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4
KCkpIHx8IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpKQogICAgICAgICBy
ZXR1cm4gbm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKTsKICAgICAKICAgICBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKQEAgLTgzMSw5ICs4MzEsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQUiA9
IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CiAgICAgaWYgKCFwcmVk
aWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
b3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5m
b09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0Nl
bGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xh
c3NJbmZvKSkpOwogICAgIAogICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9u
LCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sg
KyAxKSkKQEAgLTg1NSwxMyArODU1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZUludGUKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewotICAgICAgICBpbnQzMl90IGltbSA9IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgeworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMyKGltbSksIG9w
Mi5ncHIoKSksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMigpKSkgeworICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpIHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtl
bik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwpAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUKIHsKICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2Nh
bCk7CiAgICAgCi0gICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNoaWxkMSgpLCBub2Rl
LmxvY2FsKCkpOworICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7
CiB9CiAKQEAgLTEyODksNyArMTI4OSw3IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWwKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7
CiAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZhdChub2RlSW5kZXgpOwogICAgICAgICAgICAg
ICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIo
KV07CiAgICAgICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9k
ZUluZGV4KCkgPT0gbm9kZUluZGV4KQpAQCAtMTU5NCwxNiArMTU5NCwxNiBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlJiBub2RlKQogewotICAgIE5vZGVJbmRleCBiYXNlSW5kZXggPSBub2RlLmNoaWxkMSgpOwot
ICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKKyAgICBOb2RlVXNlIGJh
c2VVc2UgPSBub2RlLmNoaWxkMSgpOworICAgIE5vZGVVc2UgdmFsdWVVc2UgPSBub2RlLmNoaWxk
MygpOwogICAgIAotICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShiYXNlSW5kZXgpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKCZKU0J5dGVBcnJheTo6c19pbmZvKSkpOworICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0
aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlVXNl
LmluZGV4KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKICAgICBH
UFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogCi0gICAgaWYgKGF0KHZh
bHVlSW5kZXgpLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudCh2YWx1ZUluZGV4KTsKKyAgICBpZiAoYXQodmFsdWVVc2UpLmlzQ29uc3Rh
bnQoKSkgeworICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1
ZVVzZS5pbmRleCgpKTsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwpA
QCAtMTYxNSw4ICsxNjE1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9yQgogICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKGNsYW1wZWRWYWx1ZSksIHNjcmF0Y2hSZWcp
OwogICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKICAgICAgICAgdmFsdWVHUFIgPSBzY3Jh
dGNoUmVnOwotICAgIH0gZWxzZSBpZiAoIWF0KHZhbHVlSW5kZXgpLnNob3VsZE5vdFNwZWN1bGF0
ZUludGVnZXIoKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRo
aXMsIHZhbHVlSW5kZXgpOworICAgIH0gZWxzZSBpZiAoIWF0KHZhbHVlVXNlKS5zaG91bGROb3RT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFs
dWVPcCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIG1f
aml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7CkBAIC0xNjI0LDcgKzE2MjQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCCiAgICAgICAgIHZhbHVl
LmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVl
SW5kZXgpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFs
dWVVc2UpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBGUFJU
ZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwogICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVP
cC5mcHIoKTsKQEAgLTE3NDUsMTYgKzE3NDUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBH
UFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVt
ZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5n
IHJvdW5kaW5nKQogewotICAgIE5vZGVJbmRleCBiYXNlSW5kZXggPSBub2RlLmNoaWxkMSgpOwot
ICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKKyAgICBOb2RlVXNlIGJh
c2VVc2UgPSBub2RlLmNoaWxkMSgpOworICAgIE5vZGVVc2UgdmFsdWVVc2UgPSBub2RlLmNoaWxk
MygpOwogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlVXNlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7
CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogICAgIAotICAgIGlmIChhdCh2YWx1ZUluZGV4KS5pc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
dmFsdWVJbmRleCk7CisgICAgaWYgKGF0KHZhbHVlVXNlKS5pc0NvbnN0YW50KCkpIHsKKyAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQodmFsdWVVc2UuaW5kZXgoKSk7
CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
KTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKQEAgLTE3NzAsOCArMTc3
MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAg
bV9qaXQubW92ZShJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KGQpKSwgc2NyYXRjaFJlZyk7CiAgICAg
ICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7
Ci0gICAgfSBlbHNlIGlmICghYXQodmFsdWVJbmRleCkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdl
cigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFs
dWVJbmRleCk7CisgICAgfSBlbHNlIGlmICghYXQodmFsdWVVc2UpLnNob3VsZE5vdFNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRo
aXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKQEAgLTE3ODMsNyArMTc4Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgdmFsdWVHUFIgPSBz
Y3JhdGNoUmVnOwogICAgIH0gZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewog
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsK
ICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CkBAIC0xNzkyLDcgKzE3OTIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgIHZhbHVl
LmFkb3B0KHJlc3VsdCk7CiAgICAgICAgIHZhbHVlR1BSID0gZ3ByOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgRlBSUmVnIGZwciA9
IHZhbHVlT3AuZnByKCk7CiAgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CkBAIC0x
ODkxLDEzICsxODkxLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmwKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJy
YXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cykKIHsKLSAg
ICBOb2RlSW5kZXggYmFzZUluZGV4ID0gbm9kZS5jaGlsZDEoKTsKLSAgICBOb2RlSW5kZXggdmFs
dWVJbmRleCA9IG5vZGUuY2hpbGQzKCk7CisgICAgTm9kZVVzZSBiYXNlVXNlID0gbm9kZS5jaGls
ZDEoKTsKKyAgICBOb2RlVXNlIHZhbHVlVXNlID0gbm9kZS5jaGlsZDMoKTsKICAgICAKLSAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVJbmRleCk7CisgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAKICAgICBp
ZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNz
SW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVz
Y3JpcHRvci5tX2NsYXNzSW5mbykpKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgIApAQCAtMjA0Miw4ICsyMDQyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVNvZnRNb2R1bG8oTgogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKIAotICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgaW50MzJfdCBk
aXZpc29yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CisgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CisgICAgICAgIGludDMyX3Qg
ZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAg
ICAgICAgIGlmIChkaXZpc29yIDwgMCkKICAgICAgICAgICAgIGRpdmlzb3IgPSAtZGl2aXNvcjsK
IApAQCAtMjE5OSw4ICsyMTk5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRN
b2R1bG8oTgogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlJiBub2RlKQogewog
ICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSwgbV9q
aXQuY29kZUJsb2NrKCkpKSB7Ci0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hp
bGQxKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnRBc0ludDMyKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChu
b2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1
ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0yMjE0LDkgKzIyMTQs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUmIG5vCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzTnVt
YmVyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3Rh
bnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBp
bW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5j
aGlsZDIoKS5pbmRleCgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdl
cihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CkBAIC0yMjc5LDkgKzIyNzksOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUmIG5vCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhTdWIoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUsIG1faml0LmNvZGVCbG9jaygpKSkgewotICAgICAg
ICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoaXNO
dW1iZXJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQy
KCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJ
bnQzMihub2RlLmNoaWxkMigpLmluZGV4KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9k
ZS5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMjI5NCw4ICsyMjk0LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGls
ZDEoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFu
dEFzSW50MzIobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVl
T2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCkBA
IC0yNDIxLDcgKzI0MjEsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5v
ZGUsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
U3RyaWN0RXFGb3JDb25zdGFudChOb2RlJiBub2RlLCBOb2RlSW5kZXggdmFsdWUsIEpTVmFsdWUg
Y29uc3RhbnQpCitib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFu
dChOb2RlJiBub2RlLCBOb2RlVXNlIHZhbHVlLCBKU1ZhbHVlIGNvbnN0YW50KQogewogICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDk4LDE0ICsyNDk4LDE0
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAvLyAxKSBJ
ZiBlaXRoZXIgb3BlcmFuZCBpcyBhIGNvbnN0YW50IGFuZCB0aGF0IGNvbnN0YW50IGlzIG5vdCBh
IGRvdWJsZSwgaW50ZWdlciwKICAgICAvLyAgICBvciBzdHJpbmcsIHRoZW4gZG8gYSBKU1ZhbHVl
IGNvbXBhcmlzb24uCiAgICAgCi0gICAgaWYgKGlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpKSkg
ewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEo
KSk7CisgICAgaWYgKGlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4
KCkpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkp
CiAgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9k
ZS5jaGlsZDIoKSwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBpZiAoaXNKU0NvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChub2RlLmNoaWxkMigpKTsKKyAgICBpZiAoaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFs
dWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaWN0RXFGb3JDb25z
dGFudChub2RlLCBub2RlLmNoaWxkMSgpLCB2YWx1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTA2Njk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CiAgICAgfQorICAgIE5vZGUmIGF0KE5vZGVV
c2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOwor
ICAgIH0KICAgICAKICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQpOwogICAgIEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CkBAIC0y
MTgsNiArMjIyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgICAgIHJldHVybiBpbmZvLmNh
blJldXNlKCk7CiAgICAgfQorICAgIGJvb2wgY2FuUmV1c2UoTm9kZVVzZSBub2RlVXNlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNhblJldXNlKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgfQogICAg
IEdQUlJlZyByZXVzZShHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgbV9ncHJzLmxvY2socmVn
KTsKQEAgLTMxOCwxMyArMzI2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKGluZm8uZ3ByKCkpOwogI2VuZGlmCiAgICAgfQorICAgIHZvaWQgdXNlKE5vZGVVc2Ugbm9k
ZVVzZSkKKyAgICB7CisgICAgICAgIHVzZShub2RlVXNlLmluZGV4KCkpOworICAgIH0KIAogICAg
IHN0YXRpYyB2b2lkIG1hcmtDZWxsQ2FyZChNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQ
UiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIpOwogICAgIHN0YXRpYyB2
b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVzZUtpbmQpOwog
Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVn
KTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQ
UiwgTm9kZVVzZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hH
UFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7
CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBX
cml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBX
cml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5v
ZGVVc2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IEludmFsaWRHUFJSZWcpOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQ
UlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2
ZTQgPSBJbnZhbGlkR1BSUmVnKQogICAgIHsKQEAgLTg3NSw3ICs4ODcsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5v
ZGUuCiAgICAgICAgIE5vZGUmIGxhc3ROb2RlID0gYXQobGFzdE5vZGVJbmRleCk7Ci0gICAgICAg
IHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9j
b21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOworICAgICAgICByZXR1cm4gbGFz
dE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpLmluZGV4KCkgPT0gbV9jb21w
aWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOwogICAgIH0KICAgICAKICAgICB2b2lk
IG5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJik7CkBAIC04ODUsMTUgKzg5NywxNSBA
QCBwcml2YXRlOgogICAgIGVudW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsgTmVlZFRvU3BpbGwsIERv
bnRTcGlsbCB9OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fj
aGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3Rl
cnNNb2RlID0gTmVlZFRvU3BpbGwpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9p
ZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIE5v
ZGVVc2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBH
UFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBT
cGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlk
KENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNo
ZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVl
VGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBOb2RlVXNlIHZhbHVlVXNlLCBHUFJSZWcg
c2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGls
ZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbmRpZgog
Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZUluZGV4
IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21w
YXJlTnVsbChOb2RlJiwgTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwor
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKE5vZGVVc2Ugb3Bl
cmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChOb2RlVXNlIG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgs
IGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVs
bChOb2RlJiwgTm9kZVVzZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICAKICAg
ICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09w
ZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
LCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwpAQCAtMTUwNSwxNSArMTUxNywx
NSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9k
ZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGNvbnN0IENsYXNzSW5mbyosIFByZWRpY3Rp
b25DaGVja2VyKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgY29uc3Qg
Q2xhc3NJbmZvKiwgUHJlZGljdGlvbkNoZWNrZXIpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRk
KE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5k
ZXggdmFsdWUsIGNvbnN0IENsYXNzSW5mbyosIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwor
ICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVVc2UgdmFsdWUsIGNv
bnN0IENsYXNzSW5mbyosIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgY29t
cGlsZUxvZ2ljYWxOb3QoTm9kZSYpOwotICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2go
Tm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBj
b25zdCBDbGFzc0luZm8qLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGVt
aXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVVc2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJs
b2NrSW5kZXggbm90VGFrZW4sIGNvbnN0IENsYXNzSW5mbyosIGJvb2wgbmVlZFNwZWN1bGF0aW9u
Q2hlY2spOwogICAgIHZvaWQgZW1pdEJyYW5jaChOb2RlJik7CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlSW50ZWdlckNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uKTsKICAgICB2b2lkIGNvbXBpbGVEb3VibGVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlQ29uZGl0aW9uKTsKICAgICAKLSAgICBib29sIGNvbXBpbGVTdHJpY3RFcUZvckNv
bnN0YW50KE5vZGUmLCBOb2RlSW5kZXggdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOworICAgIGJv
b2wgY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSYsIE5vZGVVc2UgdmFsdWUsIEpTVmFs
dWUgY29uc3RhbnQpOwogICAgIAogICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsKICAg
ICAKQEAgLTE1OTMsNiArMTYwNSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWls
LCB0aGlzKSk7CiAgICAgfQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVVc2Ugbm9kZVVzZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsKTsKKyAgICB9
CiAgICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRob3V0IGFkZGl0aW9u
YWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKICAgICB7CkBAIC0xNjAwLDYgKzE2MTYsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iu
c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVJbmRleCwgSnVtcFZlY3RvcltpXSk7CiAgICAgfQorICAgIHZvaWQgc3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGVVc2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKKyAg
ICB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVz
ZS5pbmRleCgpLCBqdW1wc1RvRmFpbCk7CisgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9u
IGNoZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hl
Y2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXgg
bm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxh
dGlvblJlY292ZXJ5JiByZWNvdmVyeSkKICAgICB7CkBAIC0xNjA4LDYgKzE2MjgsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3Zl
cnkocmVjb3ZlcnkpOwogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChP
U1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5k
ZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxh
dGlvblJlY292ZXJpZXMoKSkpOwogICAgIH0KKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlVXNlIG5vZGVVc2Us
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zl
cnkmIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKKyAgICB9
CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3Bl
Y3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2Rl
SW5kZXgpCkBAIC0xNjIwLDYgKzE2NDQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkpOwogICAg
ICAgICBtX2NvbXBpbGVPa2F5ID0gZmFsc2U7CiAgICAgfQorICAgIHZvaWQgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3Ms
IE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLmluZGV4KCkpOworICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludElu
dGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKQEAgLTE3MTIsMTYg
KzE3NDAsMTYgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRl
eCBpbmRleCkKKyAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJ
bnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0
KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwot
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0xNzY0LDEzICsx
NzkyLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIERvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAg
IGV4cGxpY2l0IERvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGlu
ZGV4KQorICAgIGV4cGxpY2l0IERvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9k
ZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxp
ZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAg
aWYgKGppdC0+aXNGaWxsZWREb3VibGUoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZERvdWJsZShtX2luZGV4KSkKICAgICAgICAgICAgIGZwcigpOwogICAgIH0KIApAQCAtMTgwNSw5
ICsxODMzLDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IEpTVmFsdWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRl
eCBpbmRleCkKKyAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCkBAIC0xODE2LDEyICsxODQ0LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX2ppdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAg
ICAgICAgIGdwcigpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgbV9yZWdpc3Rl
ci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci5w
YXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5k
ZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGZp
bGwoKTsKICNlbmRpZgogICAgIH0KQEAgLTE5MTksMTMgKzE5NDcsMTMgQEAgcHJpdmF0ZToKIAog
Y2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBT
dG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAg
OiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4
KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChp
bmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAg
Z3ByKCk7CiAgICAgfQogICAgIApAQCAtMjA4OCwxNiArMjExNiwxNiBAQCBwcml2YXRlOgogCiBj
bGFzcyBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4
KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIE5vZGVVc2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4
KGluZGV4KQorICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3Jt
YXQoRGF0YUZvcm1hdE5vbmUpCiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobV9pbmRleCkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIxMzUsMTMg
KzIxNjMsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAg
ICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBt
X2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJS
ZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAg
ICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yMTc2LDEzICsyMjA0LDEzIEBAIHByaXZhdGU6CiAK
IGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4
KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2Zwck9y
SW52YWxpZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChtX2luZGV4KSkKICAgICAgICAgICAgIGZwcigpOwogICAgIH0KIApAQCAtMjIxMiwxMyArMjI0
MCwxMyBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
Tm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIE5vZGVVc2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAg
ICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCiAgICAg
ICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2ppdCk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobV9pbmRleCkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAg
LTIyNTMsMTMgKzIyODEsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9w
ZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAg
ICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2lu
ZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAg
ICAgZ3ByKCk7CiAgICAgfQogICAgIAo=
</data>
<flag name="commit-queue"
          id="127028"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125537</attachid>
            <date>2012-02-05 15:12:20 -0800</date>
            <delta_ts>2012-02-05 15:27:56 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>nodeuse_patch_4.diff</filename>
            <type>text/plain</type>
            <size>123336</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NzY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMi0wMi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRydzIGNoaWxkIHJlZmVyZW5jZXMgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyIHNob3VsZCBo
YXZlIHJvb20gZm9yIHR5cGUgaW5mb3JtYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Nzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgREZHOjpOb2RlOjpjaGlsZCBmaWVsZHMg
bm93IGNvbnRhaW4gYm90aCBhIERGRzo6Tm9kZUluZGV4ICh3aGljaCBpcyBqdXN0IGFuIHVuc2ln
bmVkKQorICAgICAgICBhbmQgYSBERkc6OlVzZUtpbmQgKHdoaWNoIGlzIGN1cnJlbnRseSBhbiBl
ZmZlY3RpdmVseSBlbXB0eSBlbnVtKS4gVGhleSBhcmUgZW5jYXBzdWxhdGVkCisgICAgICAgIHRv
Z2V0aGVyIGFzIGEgREZHOjpOb2RlVXNlLCB3aGljaCBjYW4gaW4gbW9zdCBjYXNlcyBzdGlsbCBi
ZSB1c2VkIGFzIGFuIGluZGV4IChmb3IKKyAgICAgICAgZXhhbXBsZSBERkc6OkdyYXBoLCBBYnN0
cmFjdFN0YXRlLCBhbmQgU3BlY3VsYXRpdmVKSVQgYWxsIGFjY2VwdCBOb2RlVXNlIGluIG1vc3Qg
cGxhY2VzCisgICAgICAgIHdoZXJlIHRoZXkgcmVhbGx5IHdhbnQgYSBOb2RlSW5kZXgpLgorICAg
ICAgICAKKyAgICAgICAgVGhlIE5vZGVVc2Ugc3RvcmVzIGJvdGggdGhlIGluZGV4IGFuZCB0aGUg
VXNlS2luZCB3aXRob3V0IGJsb2F0aW5nIHRoZSBtZW1vcnkgdXNhZ2Ugb2YKKyAgICAgICAgREZH
OjpOb2RlLCBzaW5jZSB3ZSByZWFsbHkgZG9uJ3QgbmVlZCBmdWxsIDMyIGJpdHMgZm9yIHRoZSBO
b2RlSW5kZXggKGEgREZHOjpOb2RlIGlzCisgICAgICAgIHJvdWdobHkgMTEgd29yZHMsIHNvIGlm
IHdlIGFzc3VtZSB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gdXNlIG1vcmUgdGhhbiAxR0IgdG8gREZH
IGNvbXBpbGUKKyAgICAgICAgc29tZXRoaW5nIC0gbGlrZWx5IGEgc2Vuc2libGUgYXNzdW1wdGlv
biEgLSB0aGVuIHdlIHdpbGwgb25seSBiZSBhYmxlIHRvIGhhdmUgcm9vbSBmb3IKKyAgICAgICAg
YWJvdXQgMjQgbWlsbGlvbiBub2Rlcywgd2hpY2ggbWVhbnMgd2Ugb25seSBuZWVkIGFib3V0IDI0
LjUgYml0cyBmb3IgdGhlIG5vZGUgaW5kZXgpLgorICAgICAgICBDdXJyZW50bHkgdGhlIERGRzo6
Tm9kZVVzZSBhbGxvY2F0ZXMgNCBiaXRzIGZvciB0aGUgVXNlS2luZCBhbmQgMjggYml0cyBmb3Ig
dGhlIGluZGV4LAorICAgICAgICBidXQgc3RvcmVzIHRoZSBpbmRleCBhcyBhIHNpZ25lZCBudW1i
ZXIgdG8gbWFrZSBOb05vZGUgd29yayBuYXR1cmFsbHkuIEhlbmNlIHdlIHJlYWxseQorICAgICAg
ICBqdXN0IGhhdmUgMjcgYml0cyBmb3IgdGhlIGluZGV4LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIGFsbCBiZW5jaG1hcmtzIHdlIHRyYWNrLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRWYXJBcmdDaGlsZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6b3Bl
cmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmF0KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cmVmKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWYpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbGVhckFuZERlcmVmQ2hpbGQxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZDMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpnZXRQcmVkaWN0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtQ2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmR1bXBDaGlsZHJlbik6CisgICAgICAgIChOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVJlZmVyZW5jZUJsb2IuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoTm9kZVJlZmVyZW5jZUJsb2IpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVSZWZlcmVuY2VCbG9iOjpOb2RlUmVmZXJlbmNlQmxvYik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJl
bmNlQmxvYjo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6
Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQzKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQxVW5jaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXROdW1DaGlsZHJlbik6CisgICAgICAgICogZGZnL0RG
R05vZGVVc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoTm9kZVVzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6Tm9kZVVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVVzZTo6aW5kZXhVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Omlu
ZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVXNlOjpzZXRJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZVVzZTo6dXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6
c2V0VXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6aXNTZXQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZVVzZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVVc2U6Om1ha2VXb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFn
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnZvdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmNh
bm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c3RhcnRJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRCeVZhbExvYWRFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1TdWJzdGl0dXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAg
ICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9h
cmQ6OnVzZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckJ5dGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmF0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FuUmV1c2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp1c2UpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVwSG9sZUJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6SlNWYWx1ZU9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OlNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6OlNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRl
RG91YmxlT3BlcmFuZDo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRv
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1
ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDEyLTAyLTA1ICBHeXV5b3Vu
ZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXSBTdXBw
b3J0IGphdmFzY3JpcHRjb3JlIHRlc3QgZm9yIEVGTCBwb3J0LiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODEsNiArODEsOCBAQAogCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3OTE0M0ZD
RDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQ
YWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsg
fTsKKwkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0
REYzRjEzMDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2RTE2QzE0REYzRjE2MDBCN0Iy
RTQgLyogREZHTm9kZVVzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR05vZGVVc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJG
RjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZH
Q0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMz
Q0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0Nh
cGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC04NzUsNiArODc3LDggQEAKIAkJMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R09wZXJhbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wZXJhbmRz
Lmg7IHBhdGggPSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR05v
ZGVSZWZlcmVuY2VCbG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05v
ZGVSZWZlcmVuY2VCbG9iLmg7IHBhdGggPSBkZmcvREZHTm9kZVJlZmVyZW5jZUJsb2IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERG
R05vZGVVc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZVVzZS5o
OyBwYXRoID0gZGZnL0RGR05vZGVVc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3
QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ1OCw2ICsyNDYyLDggQEAKIAkJCQk4NkVDOURC
QjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuY3BwICovLAogCQkJCTg2RUM5REJD
MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICovLAogCQkJCTg2RUNBM0U5MTMy
REVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCisJCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdC
MkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmggKi8sCisJCQkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR05vZGVVc2UuaCAqLywKIAkJCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0Mg
LyogREZHT3BlcmFuZHMuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZH
T3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09w
ZXJhdGlvbnMuaCAqLywKQEAgLTMxMjAsNiArMzEyNiw4IEBACiAJCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1
MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdOb2RlVXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJl
Z2luXTsKICAgICB9CiAgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlVXNlIG5v
ZGVVc2UpCisgICAgeworICAgICAgICByZXR1cm4gZm9yTm9kZShub2RlVXNlLmluZGV4KCkpOwor
ICAgIH0KKyAgICAKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5p
dGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8g
aW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4
ZWN1dGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhb
bm9kZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09
IFBoaSkgewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNzksNyArMTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9
PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBu
b2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5p
bmRleCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBv
cmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMjE5LDcgKzIxOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQx
KCldOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09IFBoaSkgewogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZs
dXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBu
b2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGls
ZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBAIC0yMzgsNyArMjM4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
dHItPmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpOwpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAKICAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRz
IGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7
CkBAIC01NzIsNyArNTcyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgdm9pZCBhZGRWYXJBcmdD
aGlsZChOb2RlSW5kZXggY2hpbGQpCiAgICAgewotICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFw
cGVuZChOb2RlVXNlKGNoaWxkKSk7CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncysrOwogICAg
IH0KICAgICAKQEAgLTIyNDEsOSArMjI0MSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1s
b2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCiAgICAgICAg
ICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRo
ZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKICAgICAgICAgICAgICAgICAvLyBhbmQgUGhp
cyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxl
LgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
Y2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3Jh
cGhbbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpLmluZGV4KCldLnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1ZUlu
UHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAg
ICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7CkBAIC0yMjY2LDExICsyMjY2
LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpID09IE5vTm9kZSkgeworICAgICAgICAg
ICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNl
bmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZh
bHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGls
ZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5k
dW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyNzgsMTEgKzIyNzgsMTEgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09
IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmlu
dGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFs
dWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBw
aGlOb2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyOTAsMTEgKzIy
OTAsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHBoaU5vZGUtPmNoaWxkMygpID09IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LT5jaGlsZDMoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUu
XG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3Nv
cjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2Uo
dmFsdWVJblByZWRlY2Vzc29yKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rk
b3V0KTsKQEAgLTIzMTQsOSArMjMxNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQ
aGlTdGFjaygpCiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBuZXdQaGlOb2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSA9IHBoaU5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgbmV3
UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBwaGlOb2RlLT5jaGlsZDIoKTsKLSAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS0+Y2hpbGQz
KCk7CisgICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47
CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAg
ICBwcmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgbmV3UGhpKTsKQEAgLTIzMjQsOSAr
MjMyMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLmZpeGVkLmNoaWxkMSA9IG5ld1BoaTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVu
LmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIHBoaU5vZGUtPmNo
aWxkcmVuLmNoaWxkMSgpID0gTm9kZVVzZShuZXdQaGkpOworICAgICAgICAgICAgcGhpTm9kZS0+
Y2hpbGRyZW4uY2hpbGQyKCkgPSBOb2RlVXNlKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAg
ICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UoTm9Ob2RlKTsKIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIHByaW50
ZigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzky
LDExIEBAIHN0cnVjdCBOb2RlSW5kZXhUcmFpdHMgewogICAgIH0KIH07CiAKK2VudW0gVXNlS2lu
ZCB7CisgICAgVW50eXBlZFVzZSwKKyAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0
aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhlIG51
bWJlciBvZiBlbnVtIGVsZW1lbnRzLgorfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywxNiArMTYzLDE2IEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgICAgICAgICBw
cmludGYoIiwgIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBwcmludGYoIkAldSIsIG1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0uaW5kZXgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSAhPSBOb05vZGUpCi0gICAgICAgICAgICBwcmludGYoIkAldSIsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSAhPSBOb05vZGUpCi0gICAgICAgICAg
ICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxk
MygpICE9IE5vTm9kZSkKLSAgICAgICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMygp
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOworICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNo
aWxkMSgpLmluZGV4KCkpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKQorICAgICAgICAg
ICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICgh
IW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMo
KS5pbmRleCgpKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9ICEhbm9kZS5jaGlsZDEoKTsKICAgICB9
CiAKICAgICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKSB7CkBAIC0zMDUsMjAgKzMwNSwy
MCBAQCB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICAgICAg
ICAgICBfY2hpbGRJZHgrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElk
eF0pOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYg
KF9ub2RlLmNoaWxkMSgpID09IE5vTm9kZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIEFTU0VSVChfbm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAmJiBfbm9kZS5jaGls
ZDMoKSA9PSBOb05vZGUpOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFf
bm9kZS5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgaWYgKF9ub2RlLmNoaWxkMigpID09IE5vTm9kZSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVChfbm9kZS5jaGlsZDMoKSA9PSBOb05v
ZGUpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGls
ZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKF9ub2RlLmNoaWxkMygpID09
IE5vTm9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYg
KCFfbm9kZS5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMygp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTA2Njk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw2ICs3MSwxNSBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEgewogLy8gTm9kZXMgdGhh
dCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNz
IEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2RlLCA2ND4gewogcHVibGljOgorICAgIHVzaW5nIFZl
Y3RvcjxOb2RlLCA2ND46Om9wZXJhdG9yW107CisgICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6
YXQ7CisgICAgCisgICAgTm9kZSYgb3BlcmF0b3JbXShOb2RlVXNlIG5vZGVVc2UpIHsgcmV0dXJu
IGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAgICBjb25zdCBOb2RlJiBvcGVyYXRvcltdKE5vZGVV
c2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIAor
ICAgIE5vZGUmIGF0KE5vZGVVc2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgp
KTsgfQorICAgIGNvbnN0IE5vZGUmIGF0KE5vZGVVc2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4g
YXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIAogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5n
IHJlZmVyZW5jZWQuCiAgICAgdm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBA
IC03OSwzNSArODgsNDMgQEAgcHVibGljOgogICAgICAgICBpZiAobm9kZS5yZWYoKSkKICAgICAg
ICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7CiAgICAgfQorICAgIHZvaWQgcmVmKE5vZGVV
c2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHJlZihub2RlVXNlLmluZGV4KCkpOworICAgIH0K
ICAgICAKICAgICB2b2lkIGRlcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBpZiAoYXQobm9kZUluZGV4KS5kZXJlZigpKQogICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihu
b2RlSW5kZXgpOwogICAgIH0KKyAgICB2b2lkIGRlcmVmKE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7
CisgICAgICAgIGRlcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgfQogICAgIAogICAgIHZvaWQg
Y2xlYXJBbmREZXJlZkNoaWxkMShOb2RlJiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlLmNoaWxk
MSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkcmVuLmZp
eGVkLmNoaWxkMSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gTm9Ob2Rl
OworICAgICAgICBkZXJlZihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5j
aGlsZDEoKSA9IE5vZGVVc2UoKTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGls
ZDIoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMiA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIpOwotICAg
ICAgICBub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IE5vTm9kZTsKKyAgICAgICAgZGVyZWYo
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBOb2RlVXNl
KCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPT0gTm9Ob2RlKQor
ICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRlcmVmKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzKTsKLSAgICAgICAgbm9kZS5jaGlsZHJl
bi5maXhlZC5jaGlsZDMgPSBOb05vZGU7CisgICAgICAgIGRlcmVmKG5vZGUuY2hpbGQzKCkpOwor
ICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gTm9kZVVzZSgpOwogICAgIH0KIAogICAg
IC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9y
bWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTI1NSw3ICsy
NzIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4g
LCA4PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJl
bjsKKyAgICBWZWN0b3I8Tm9kZVVzZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAgICAgVmVjdG9y
PFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZlY3RvcjxSZXNv
bHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8Tm9kZUluZGV4
LCA4PiBtX2FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3Miw3IEBAIHB1
YmxpYzoKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBnZXQgcHJlZGljdGlvbnMKICAgICBQcmVk
aWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWN0
aW9uKCk7IH0KICAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ2V0UHJlZGljdGlvbihncmFwaCgpW25vZGVJbmRleF0pOyB9CisgICAg
UHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKE5vZGVVc2Ugbm9kZVVzZSkgeyByZXR1cm4gZ2V0
UHJlZGljdGlvbihub2RlVXNlLmluZGV4KCkpOyB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIHZvaWQqIGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTA2Njk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHTm9kZVJlZmVyZW5jZUJs
b2IuaCIKICNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTM0NywzNiArMzQ4LDMzIEBAIHN0
cnVjdCBOb2RlIHsKICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9i
OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdp
c3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQo
IShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxh
Z3MoKSk7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAgICAg
Y2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5j
aGlsZDMgPSBjaGlsZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVw
IHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEg
PSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBO
b05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBj
aGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhp
bW0ubV92YWx1ZSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewog
ICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Ci0gICAgICAgIGNoaWxkcmVu
LmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0g
Y2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBp
bW1lZGlhdGUgdmFsdWVzLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQog
ICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAg
ICAgLCBjaGlsZHJlbihOb2RlUmVmZXJlbmNlQmxvYjo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3Zh
bHVlKQpAQCAtMzg0LDE1ICszODIsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJl
ZGljdGlvbihQcmVkaWN0Tm9uZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhh
c1ZhckFyZ3MpKTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOwotICAg
ICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBjaGlsZDI7Ci0gICAgICAgIGNoaWxkcmVuLmZp
eGVkLmNoaWxkMyA9IGNoaWxkMzsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9k
ZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZh
bHVlcy4KICAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNp
Z25lZCBudW1DaGlsZHJlbikKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCisgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OlZhcmlh
YmxlLCBmaXJzdENoaWxkLCBudW1DaGlsZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rl
cihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAg
ICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC00MDAsOCArMzk2LDYgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKLSAgICAgICAgY2hpbGRyZW4udmFyaWFibGUu
Zmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNo
aWxkcmVuID0gbnVtQ2hpbGRyZW47CiAgICAgfQogCiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpA
QCAtODQ1LDQyICs4MzksNDIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gIS0tbV9y
ZWZDb3VudDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoaWxkMSgpCisgICAgTm9kZVVz
ZSBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OwotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4g
Y2hpbGRyZW4uY2hpbGQxKCk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlm
IHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3QgY2hpbGQKICAgICAvLyBi
ZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVzZSB0aGlzIHdpdGggY2Fy
ZSBhbmQKICAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KLSAgICBOb2RlSW5kZXggY2hpbGQx
VW5jaGVja2VkKCkKKyAgICBOb2RlVXNlIGNoaWxkMVVuY2hlY2tlZCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4gY2hpbGRyZW4u
Y2hpbGQxVW5jaGVja2VkKCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMigpCisgICAg
Tm9kZVVzZSBjaGlsZDIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMygp
CisgICAgTm9kZVVzZSBjaGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2Rl
SGFzVmFyQXJncykpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAg
ICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVk
IGZpcnN0Q2hpbGQoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
OwotICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZDsKKyAgICAgICAg
cmV0dXJuIGNoaWxkcmVuLmZpcnN0Q2hpbGQoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
bnVtQ2hpbGRyZW4oKQogICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
OwotICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW47CisgICAgICAg
IHJldHVybiBjaGlsZHJlbi5udW1DaGlsZHJlbigpOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24oKQpAQCAtMTAzNCwzMSArMTAyOCwyMyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgCiAgICAgdm9pZCBkdW1wQ2hpbGRyZW4oRklMRSogb3V0KQogICAgIHsKLSAgICAgICAg
aWYgKGNoaWxkMSgpID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZnByaW50ZihvdXQsICJAJXUiLCBjaGlsZDEoKSk7Ci0gICAg
ICAgIGlmIChjaGlsZDIoKSA9PSBOb05vZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiQCV1Iiwg
Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICghY2hpbGQyKCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDIoKSk7Ci0gICAgICAg
IGlmIChjaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBj
aGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZnByaW50ZihvdXQsICIsIEAldSIsIGNoaWxkMygpKTsKKyAgICAgICAg
ZnByaW50ZihvdXQsICIsIEAldSIsIGNoaWxkMygpLmluZGV4KCkpOwogICAgIH0KICAgICAKICAg
ICAvLyBUaGlzIGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAg
IE5vZGVUeXBlIG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcg
aW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4K
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAz
IGNoaWxkcmVuICgwIGZvciBubyBjaGlsZCkuCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7Ci0gICAgICAg
IH0gZml4ZWQ7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENo
aWxkOwotICAgICAgICAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW47Ci0gICAgICAgIH0gdmFyaWFi
bGU7Ci0gICAgfSBjaGlsZHJlbjsKKyAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRy
ZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KKyAgICBO
b2RlUmVmZXJlbmNlQmxvYiBjaGlsZHJlbjsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgdmlydHVh
bCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVSZWZlcmVuY2VCbG9iLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNl
QmxvYi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
UmVmZXJlbmNlQmxvYi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVSZWZl
cmVuY2VCbG9iX2gKKyNkZWZpbmUgREZHTm9kZVJlZmVyZW5jZUJsb2JfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorI2luY2x1ZGUgIkRGR05vZGVVc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBOb2RlUmVmZXJlbmNlQmxvYiB7CitwdWJsaWM6CisgICAgZW51
bSBLaW5kIHsKKyAgICAgICAgRml4ZWQsCisgICAgICAgIFZhcmlhYmxlCisgICAgfTsKKworICAg
IE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2luZCkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIDogbV9raW5kKGtpbmQpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChraW5kID09IFZh
cmlhYmxlKSB7CisgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01B
WDsKKyAgICAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9IFVJTlRfTUFYOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2luZCwgTm9k
ZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIDogbV9raW5kKEZpeGVkKQorI2VuZGlmCisgICAgewor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gRml4ZWQpOworICAgICAgICBpbml0
aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgIH0KKyAgICAKKyAgICBOb2RlUmVm
ZXJlbmNlQmxvYihLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNo
aWxkcmVuKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUp
CisjZW5kaWYKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJp
YWJsZSk7CisgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CisgICAgICAgIHNldE51
bUNoaWxkcmVuKG51bUNoaWxkcmVuKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgTm9kZVVzZSYg
Y2hpbGQodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgMyk7Cisg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOworICAgICAgICByZXR1cm4gbV93b3Jkc1tp
XTsKKyAgICB9ICAgIAorICAgIAorICAgIE5vZGVVc2UmIGNoaWxkKHVuc2lnbmVkIGkpCisgICAg
eworICAgICAgICBBU1NFUlQoaSA8IDMpOworICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVk
KTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CisgICAgfQorICAgIAorICAgIE5vZGVVc2Ug
Y2hpbGQxKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCk7IH0KKyAgICBOb2RlVXNlIGNoaWxkMigp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkKDEpOyB9CisgICAgTm9kZVVzZSBjaGlsZDMoKSBjb25zdCB7
IHJldHVybiBjaGlsZCgyKTsgfQorCisgICAgTm9kZVVzZSYgY2hpbGQxKCkgeyByZXR1cm4gY2hp
bGQoMCk7IH0KKyAgICBOb2RlVXNlJiBjaGlsZDIoKSB7IHJldHVybiBjaGlsZCgxKTsgfQorICAg
IE5vZGVVc2UmIGNoaWxkMygpIHsgcmV0dXJuIGNoaWxkKDIpOyB9CisgICAgCisgICAgTm9kZVVz
ZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRzWzBdOyB9CisgICAgCisg
ICAgdm9pZCBpbml0aWFsaXplKE5vZGVVc2UgY2hpbGQxLCBOb2RlVXNlIGNoaWxkMiwgTm9kZVVz
ZSBjaGlsZDMpCisgICAgeworICAgICAgICBjaGlsZCgwKSA9IGNoaWxkMTsKKyAgICAgICAgY2hp
bGQoMSkgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMiwg
Tm9kZUluZGV4IGNoaWxkMykKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoTm9kZVVzZShjaGls
ZDEpLCBOb2RlVXNlKGNoaWxkMiksIE5vZGVVc2UoY2hpbGQzKSk7CisgICAgfQorCisgICAgdW5z
aWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09
IFZhcmlhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKKyAg
ICB9CisgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93b3Jkc1swXS5t
X2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVt
Q2hpbGRyZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJs
ZSk7CisgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CisgICAgfQorICAg
IHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29k
ZWRXb3JkID0gbnVtQ2hpbGRyZW47CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVXNl
IG1fd29yZHNbM107CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEtpbmQgbV9raW5kOworI2Vu
ZGlmCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHTm9kZVVzZV9oCisjZGVmaW5lIERGR05vZGVVc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVSZWZlcmVu
Y2VCbG9iOworCitjbGFzcyBOb2RlVXNlIHsKK3B1YmxpYzoKKyAgICBOb2RlVXNlKCkKKyAgICAg
ICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKE5vTm9kZSwgVW50eXBlZFVzZSkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBOb2RlVXNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIFVudHlwZWRVc2UpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZVVzZShOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VL
aW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgs
IHVzZUtpbmQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGluZGV4VW5jaGVj
a2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9CisgICAgTm9k
ZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICB9CisgICAgCisgICAgVXNl
S2luZCB1c2VLaW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAmICgoMSA8PCBzaGlmdCgpIC0g
MSkpOworICAgICAgICBBU1NFUlQobWFza2VkIDwgTGFzdFVzZUtpbmQpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VXNlS2luZD4obWFza2VkKTsKKyAgICB9CisgICAgdm9pZCBzZXRVc2VL
aW5kKFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAg
ICAgICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKGluZGV4KCksIHVzZUtpbmQpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gaW5kZXhVbmNoZWNrZWQoKSAh
PSBOb05vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgp
OyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE5vZGVVc2Ugb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9lbmNvZGVkV29yZCA9PSBvdGhlci5tX2VuY29kZWRXb3JkOwor
ICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oTm9kZVVzZSBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkICE9IG90aGVyLm1fZW5jb2RlZFdvcmQ7CisgICAg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOb2RlUmVmZXJlbmNlQmxvYjsKKyAgICAK
KyAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA0OyB9CisgICAgCisgICAgc3Rh
dGljIGludDMyX3QgbWFrZVdvcmQoTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlS2luZCB1c2VLaW5k
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PigoKHN0YXRpY19j
YXN0PGludDMyX3Q+KG5vZGVJbmRleCkgPDwgc2hpZnQoKSkgPj4gc2hpZnQoKSkpID09IG5vZGVJ
bmRleCk7CisgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYgdXNlS2luZCA8IExhc3RVc2VL
aW5kKTsKKyAgICAgICAgQVNTRVJUKExhc3RVc2VLaW5kIDw9ICgxIDw8IHNoaWZ0KCkpKTsKKyAg
ICAgICAgcmV0dXJuIChub2RlSW5kZXggPDwgc2hpZnQoKSkgfCB1c2VLaW5kOworICAgIH0KKyAg
ICAKKyAgICBpbnQzMl90IG1fZW5jb2RlZFdvcmQ7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KE5vZGVVc2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICByZXR1cm4g
bm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpID09IG5vZGVJbmRleDsKK30KK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZVVzZSBub2RlVXNlKQoreworICAgIHJl
dHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworfQoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShOb2RlVXNlIG5vZGVVc2UsIE5vZGVJbmRleCBub2RlSW5kZXgpCit7Cisg
ICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSAhPSBub2RlSW5kZXg7Cit9Citpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGVVc2Ugbm9kZVVzZSkK
K3sKKyAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdOb2RlVXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NyArMTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRk
OgogICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJv
KG5vZGUuY2hpbGQxKCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAg
ICAgIGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdE5lZ1pl
cm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9k
ZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwpAQCAtMTU2LDcg
KzE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUuY2hpbGQxKCkpIHx8
IGlzTm90WmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc05vdFplcm8obm9kZS5jaGlsZDIoKS5pbmRleCgpKSkK
ICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVybzsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJp
dGhOb2RlRmxhZ3MoZmxhZ3MpOwpAQCAtMjEwLDEzICsyMTAsMTMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMigpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQy
KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLmNoaWxkMygpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDMoKV0ubWVyZ2VBcml0aE5v
ZGVGbGFncyhmbGFncyk7CiAgICAgICAgICAgICB9CkBAIC02NzYsMjEgKzY3NiwyMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB2b3RlKE5vZGVJbmRleCBub2RlSW5k
ZXgsIFZhcmlhYmxlQWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdCkKKyAgICB2b2lkIHZvdGUoTm9k
ZVVzZSBub2RlVXNlLCBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3QpCiAgICAgewot
ICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgeworICAgICAgICBzd2l0Y2gg
KG1fZ3JhcGhbbm9kZVVzZV0ub3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgogICAg
ICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAg
ICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFw
aFtub2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZVVzZSA9IG1fZ3JhcGhbbm9k
ZVVzZV0uY2hpbGQxKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFw
aFtub2RlSW5kZXhdLm9wID09IEdldExvY2FsKQotICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5k
ZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CisgICAgICAgIGlmIChtX2dy
YXBoW25vZGVVc2VdLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgbV9ncmFwaFtub2RlVXNl
XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShiYWxsb3QpOwogICAgIH0KICAgICAKICAgICB2
b2lkIHZvdGUoTm9kZSYgbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQpA
QCAtNzAxLDEzICs3MDEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gTm9Ob2RlKQorICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQxKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZv
dGUobm9kZS5jaGlsZDEoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0g
Tm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIHZvdGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKLSAgICAgICAgaWYgKG5vZGUu
Y2hpbGQzKCkgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIHZvdGUobm9kZS5jaGlsZDMoKSwgYmFsbG90KTsKICAgICB9
CkBAIC04MzUsMTMgKzgzNSwxMyBAQCBwcml2YXRlOgogICAgICAgICB9IHdoaWxlIChtX2NoYW5n
ZWQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgdm9pZCB0b0RvdWJsZShOb2RlVXNlIG5vZGVVc2UpCiAgICAgewotICAgICAgICBpZiAo
bV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKKyAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZVVzZV0ub3AgPT0gVmFsdWVUb051bWJlcikgewogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIHByaW50ZigiICBAJXUgLT4gVmFs
dWVUb0RvdWJsZSIsIG5vZGVJbmRleCk7CisgICAgICAgICAgICBwcmludGYoIiAgQCV1IC0+IFZh
bHVlVG9Eb3VibGUiLCBub2RlVXNlLmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBtX2dy
YXBoW25vZGVJbmRleF0ub3AgPSBWYWx1ZVRvRG91YmxlOworICAgICAgICAgICAgbV9ncmFwaFtu
b2RlVXNlXS5vcCA9IFZhbHVlVG9Eb3VibGU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk3Nyw4
ICs5NzcsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7Ci0gICAgICAg
ICAgICBpZiAobm9kZS5jaGlsZDMoKSAhPSBOb05vZGUgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygp
XS5vcCA9PSBOb3ApCi0gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMg
PSBOb05vZGU7CisgICAgICAgICAgICBpZiAoISFub2RlLmNoaWxkMygpICYmIG1fZ3JhcGhbbm9k
ZS5jaGlsZDMoKV0ub3AgPT0gTm9wKQorICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hp
bGQzKCkgPSBOb2RlVXNlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgpAQCAtMTAwNSwxMyArMTAwNSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0u
b3AgPT0gVmFsdWVUb051bWJlcikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9k
ZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCA9PSBWYWx1ZVRvSW50MzIpCi0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2dy
YXBoW25vZGVJbmRleF0uY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlSW5kZXggPSBtX2dyYXBo
W25vZGVJbmRleF0uY2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CiAgICAgfQorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZVVzZSBub2Rl
VXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShub2RlVXNlLmluZGV4VW5j
aGVja2VkKCkpOworICAgIH0KICAgICAKICAgICAvLyBDb21wdXRlcyB3aGVyZSB0aGUgc2VhcmNo
IGZvciBhIGNhbmRpZGF0ZSBmb3IgQ1NFIHNob3VsZCBzdGFydC4gRG9uJ3QgY2FsbAogICAgIC8v
IHRoaXMgZGlyZWN0bHk7IGNhbGwgc3RhcnRJbmRleCgpIGluc3RlYWQgYXMgaXQgZG9lcyBsb2dn
aW5nIGluIGRlYnVnIG1vZGUuCkBAIC0xMDYxLDcgKzEwNjUsMTAgQEAgcHJpdmF0ZToKICAgICBO
b2RlSW5kZXggc3RhcnRJbmRleCgpCiAgICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIHJldHVybiBzdGFydEluZGV4Rm9yQ2hpbGRyZW4o
bm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgIHJl
dHVybiBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oCisgICAgICAgICAgICBub2RlLmNoaWxkMSgpLmlu
ZGV4VW5jaGVja2VkKCksCisgICAgICAgICAgICBub2RlLmNoaWxkMigpLmluZGV4VW5jaGVja2Vk
KCksCisgICAgICAgICAgICBub2RlLmNoaWxkMygpLmluZGV4VW5jaGVja2VkKCkpOwogICAgIH0K
ICAgICAKICAgICBOb2RlSW5kZXggZW5kSW5kZXhGb3JQdXJlQ1NFKCkKQEAgLTEyMDcsNyArMTIx
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IFB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2
YXJOdW1iZXIgJiYgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4p
ID09IGdsb2JhbE9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQx
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTIzNSw3ICsxMjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBpZiAoIWJ5VmFsSXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5v
bmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRleCgpOwogICAgICAgICAgICAgICAgIC8vIFdlIG11c3Qg
YXNzdW1lIHRoYXQgdGhlIFB1dEJ5VmFsIHdpbGwgY2xvYmJlciB0aGUgbG9jYXRpb24gd2UncmUg
Z2V0dGluZyBmcm9tLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVy
OyBpZiB3ZSBrbm93IHRoYXQgdGhlIFB1dEJ5VmFsIGlzIGFjY2Vzc2luZyBhbiBhcnJheSBvZiBh
CiAgICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50IHR5cGUgdGhhbiB0aGUgR2V0QnlWYWwsIHRo
ZW4gd2Uga25vdyB0aGF0IHRoZXkgd29uJ3QgY2xvYmJlciBlYWNoIG90aGVyLgpAQCAtMTMyOCw3
ICsxMzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IGNoaWxkMSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCkuaW5kZXgoKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNDQyLDIyICsxNDQ5LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05v
ZGU7CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlSW5kZXgm
IGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9u
KE5vZGVVc2UmIGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCiAgICAgewogICAgICAgICAvLyBD
aGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgotICAgICAgICBpZiAoY2hp
bGQgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIWNoaWxkKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2VtZW50Lgot
ICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQgPSBtX3JlcGxhY2VtZW50c1tjaGlsZF07Cisg
ICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkLmluZGV4
KCldOwogICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgY2hpbGQgPSByZXBsYWNlbWVudDsKKyAgICAgICAgY2hp
bGQuc2V0SW5kZXgocmVwbGFjZW1lbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgaXMg
ZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9l
cyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQobV9y
ZXBsYWNlbWVudHNbY2hpbGRdID09IE5vTm9kZSk7CisgICAgICAgIEFTU0VSVChtX3JlcGxhY2Vt
ZW50c1tjaGlsZC5pbmRleCgpXSA9PSBOb05vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKGFk
ZFJlZikKICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOwpAQCAtMTUwNSw5ICsxNTEy
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9u
KG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGls
ZHJlbi5maXhlZC5jaGlsZDEsIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1T
dWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIsIHNob3VsZEdlbmVyYXRlKTsK
LSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhlZC5jaGls
ZDMsIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9k
ZS5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQzKCksIHNo
b3VsZEdlbmVyYXRlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFzaG91bGRH
ZW5lcmF0ZSkKQEAgLTE2MDIsMzcgKzE2MDksMzcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUp
KQotICAgICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2Rl
KSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSAhPSBOb05vZGUpCisgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9kZSkgJiYgZ2V0QnlW
YWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmNoaWxkMigpLmlu
ZGV4KCkpICE9IE5vTm9kZSkKICAgICAgICAgICAgICAgICBub2RlLm9wID0gUHV0QnlWYWxBbGlh
czsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24o
bm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBpZiAoY2hl
Y2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGls
ZDEoKS5pbmRleCgpKSkKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgIGlmIChj
aGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5jdGlvbigpLCBub2RlLmNoaWxkMSgpKSkK
KyAgICAgICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5jdGlvbigp
LCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJl
ZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwogICAgICAgICAg
ICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJlZGljdGlv
biAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOwotICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNo
aWxkMSgpLCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbikpOworICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2Rl
LmNoaWxkMSgpLmluZGV4KCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9y
YWdlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVs
aW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdl
dEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBk
ZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJ
KHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVC
b2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAotI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5oPgorI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtMTA2LDYgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ZyZWUuYXBwZW5kKGlu
ZGV4KTsKICAgICAgICAgfQogICAgIH0KKyAgICB2b2lkIHVzZShOb2RlVXNlIGNoaWxkKQorICAg
IHsKKyAgICAgICAgdXNlKGNoaWxkLmluZGV4VW5jaGVja2VkKCkpOworICAgIH0KIAogICAgIHVu
c2lnbmVkIGhpZ2hXYXRlcm1hcmsoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTA2
Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDcgKzM2MCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmQKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGlzS25vd25OdW1lcmlj
KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkpIHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBvcDEuZmlsbCgpOwogICAgICAgICBpZiAob3AxLmlzRG91YmxlKCkpIHsK
QEAgLTM4MSw4ICszODEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZh
bHVlCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOwogICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFsc2UpOwogCi0gICAgQVNTRVJUKCFpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwotICAgIEFTU0VSVCghaXNOdW1iZXJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSk7CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKSk7CisgICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkpOwogCiAgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKICAgICBH
UFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CkBAIC00MTUsOSArNDE1LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihOb2RlJiBub2RlKQogewotICAgIEFT
U0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKIAotICAgIGlmIChpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MSgpLmluZGV4KCkpKSB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTUzMiwxNCArNTMyLDE0
IEBAIEpJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAgICByZXR1cm4g
ZnVuY3Rpb25DYWxsOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVU
YWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5k
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRH
UFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgTm9kZVVzZSB2
YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1
dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7CiAgICAg
bV9qaXQuYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKTsKICAgICBKSVRDb21waWxlcjo6RGF0
YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1
Y3R1cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1
YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICBtX2ppdC5lbmRVbmludGVycnVw
dGVkU2VxdWVuY2UoKTsKIAotICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVU
YWdHUFIsIHZhbHVlSW5kZXgsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
R1BSKTsKKyAgICB3cml0ZUJhcnJpZXIoYmFzZVBheWxvYWRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1
ZVVzZSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsMzIgdGFnU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CkBAIC01NzYsNyArNTc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJ
ZChDb2RlTwogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3Jk
KGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVD
aGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QodGFnU3RvcmVXaXRoUGF0Y2gubGFi
ZWwoKSksIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHBheWxvYWRTdG9yZVdpdGhQYXRj
aC5sYWJlbCgpKSwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlUGF5
bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4odmFsdWVUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+
KHZhbHVlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxs
KE5vZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChOb2RlVXNlIG9wZXJhbmQsIGJvb2wg
aW52ZXJ0KQogewogICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKICAgICBH
UFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwpAQCAtNTg2LDEzICs1ODYsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIEdQUlJlZyByZXN1bHRQ
YXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkKKyAgICBpZiAoIWlzS25v
d25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCiAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZ1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRQYXls
b2FkR1BSKTsKICAgICBtX2ppdC50ZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJ
VENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BS
LCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIAot
ICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKG9w
ZXJhbmQuaW5kZXgoKSkpIHsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwpAQCAtNjA4
LDcgKzYwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAg
ICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9k
ZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9k
ZVVzZSBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsK
ICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKICAgICBCbG9ja0lu
ZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKQEAgLTYzMCwxMyArNjMw
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgIAotICAgIGlmICghaXNLbm93bkNlbGwo
b3BlcmFuZCkpCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKQogICAgICAg
ICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgCiAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVz
dDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
LCB0YWtlbik7CiAgICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgeworICAgIGlm
ICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkgewogICAgICAgICBhZGRCcmFuY2gobV9q
aXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgICAgIAogICAgICAgICBub3RDZWxsLmxpbmsoJm1f
aml0KTsKQEAgLTY1MSw3ICs2NTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBoCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKIH0K
IAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiBu
b2RlLCBOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCitib29sIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUmIG5vZGUsIE5vZGVVc2Ugb3BlcmFuZCwg
Ym9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBl
ZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKQEAg
LTY5OCw3ICs2OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlm
IChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihu
b2RlLmNoaWxkMigpKSkgeworICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgp
LmluZGV4KCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsK
ICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKIApAQCAtNzE2LDE0ICs3MTYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBhcmcxLnVzZSgpOwogICAgICAgICBh
cmcyLnVzZSgpOwogCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkp
CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKSk7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkp
CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKSk7CiAgICAgCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25k
LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpLCB0YWtlbik7CiAgICAgCi0gICAgICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewog
ICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwogICAgIAogICAg
ICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwpAQCAtNzUxLDcgKzc1MSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAKICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
aWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNLbm93bk5v
dEludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdC5ncHIo
KTsKICAgICAKQEAgLTc2OSwxNCArNzY5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGUKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsK
ICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQogICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpKTsKIAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFy
ZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIo
KSkpIHsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkp
IHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOwogICAgIAogICAg
ICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwpAQCAtODIyLDcgKzgyMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBhcmcxLnVzZSgpOwogICAg
IGFyZzIudXNlKCk7CiAgICAgCi0gICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkpICYm
IGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgaWYgKGlzS25vd25DZWxsKG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkg
ewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBj
ZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAgICAgICAgLy8gY2VsbCwgdGhlbiB0
aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIp
LCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsKQEAgLTg2MSw3ICs4NjEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgYXJnMS51c2UoKTsKICAgICBh
cmcyLnVzZSgpOwogICAgIAotICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBp
c0tub3duQ2VsbChub2RlLmNoaWxkMigpKSkgeworICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNo
aWxkMSgpLmluZGV4KCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsK
ICAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2Vs
bHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhl
eSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RF
cXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxUGF5
bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOwpAQCAtOTA4LDExICs5MDgsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogCiAgICAgQ2FsbExpbmtJbmZvOjpDYWxs
VHlwZSBjYWxsVHlwZSA9IG5vZGUub3AgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2FsbCA6IENh
bGxMaW5rSW5mbzo6Q29uc3RydWN0OwogCi0gICAgTm9kZUluZGV4IGNhbGxlZU5vZGVJbmRleCA9
IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV07Ci0gICAg
SlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJbmRleCk7CisgICAgTm9kZVVz
ZSBjYWxsZWVOb2RlVXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmly
c3RDaGlsZCgpXTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlTm9kZVVz
ZSk7CiAgICAgR1BSUmVnIGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKICAgICBHUFJS
ZWcgY2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7Ci0gICAgdXNlKGNhbGxl
ZU5vZGVJbmRleCk7CisgICAgdXNlKGNhbGxlZU5vZGVVc2UpOwogCiAgICAgLy8gVGhlIGNhbGwg
aW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwg
Y2FsbCkgb3IgdGhlCiAgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBj
aGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KQEAgLTkyNCwxMSArOTI0LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBtX2ppdC5zdG9yZTMyKGNhbGxl
ZVRhZ0dQUiwgY2FsbEZyYW1lVGFnU2xvdChSZWdpc3RlckZpbGU6OkNhbGxlZSkpOwogCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgTm9kZUlu
ZGV4IGFyZ05vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZp
cnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFy
Z05vZGVJbmRleCk7CisgICAgICAgIE5vZGVVc2UgYXJnTm9kZVVzZSA9IG1faml0LmdyYXBoKCku
bV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ05vZGVVc2UpOwogICAgICAgICBHUFJSZWcgYXJnVGFn
R1BSID0gYXJnLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5w
YXlsb2FkR1BSKCk7Ci0gICAgICAgIHVzZShhcmdOb2RlSW5kZXgpOworICAgICAgICB1c2UoYXJn
Tm9kZVVzZSk7CiAKICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIsIGFyZ3VtZW50VGFn
U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQ
YXlsb2FkR1BSLCBhcmd1bWVudFBheWxvYWRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwpA
QCAtMTQzOSw3ICsxNDM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRk
KE5vZAogICAgIAogICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwogICAgIEdQUlJlc3Vs
dCByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgIGlmIChpc0tub3duTm90TnVtYmVyKG5vZGUuY2hp
bGQxKCkpIHx8IGlzS25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDIoKSkpCisgICAgaWYgKGlzS25v
d25Ob3ROdW1iZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTm90TnVtYmVyKG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFs
dWVBZGROb3ROdW1iZXIsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgb3Ax
VGFnR1BSLCBvcDFQYXlsb2FkR1BSLCBvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpOwogICAgIGVs
c2UKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRh
Z0dQUiwgb3AyUGF5bG9hZEdQUik7CkBAIC0xNDQ3LDkgKzE0NDcsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBu
b2RlSW5kZXgsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBib29sIG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KE5vZGVVc2Ugbm9kZVVzZSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZUluZGV4KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5
bG9hZEdQUigpOwpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdE9yT3RoZQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25D
aGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxv
YWRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2UsIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTE0NjcsNyArMTQ2Nyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBpZiAobmVlZFNwZWN1bGF0aW9u
Q2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
Uik7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRh
Z0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgCkBAIC0xNDc4LDcgKzE0NzgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGlzS25vd25Cb29s
ZWFuKG5vZGUuY2hpbGQxKCkpIHx8IGlzQm9vbGVhblByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGlj
dGlvbihub2RlLmNoaWxkMSgpKSkpIHsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGls
ZDEoKS5pbmRleCgpKSB8fCBpc0Jvb2xlYW5QcmVkaWN0aW9uKG1faml0LmdldFByZWRpY3Rpb24o
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSkpIHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgdmFsdWUpOwogICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoMSksIHZh
bHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMTUzNSw5ICsxNTM1LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0
UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJ
bmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZVVzZSBub2RlVXNl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbywgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKLSAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGVVc2UpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlJl
ZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRH
UFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
dmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgaWYgKG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwg
bm9kZVVzZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1f
aml0KTsKQEAgLTE1NTQsNyArMTU1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnIKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9q
aXQubW92ZSh2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2Rl
VXNlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgIH0KIAogICAgIGlmIChub3RU
YWtlbiAhPSAobV9ibG9jayArIDEpKQpAQCAtMTU2OCw3ICsxNTY4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2Rl
LnRha2VuQmxvY2tJbmRleCgpOwogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOwogCi0gICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkp
KSB7CisgICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAg
ICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm87CiAKQEAgLTE4MDAsMTggKzE4MDAsMTggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQml0QW5kOgogICAgIGNh
c2UgQml0T3I6CiAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxk
MSgpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0
T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIG9wMi5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZS5jaGlsZDIoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4
KCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0x
ODMwLDExICsxODMwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJp
dFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsK
KyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAg
ICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2hpZnRPcChvcCwg
b3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpICYg
MHgxZiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTIwOTEsMTIgKzIw
OTEsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBicmVhazsKIAogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBpZiAoaXNOdWxsQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVO
dWxsKG5vZGUsIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc051bGxDb25zdGFudChub2Rl
LmNoaWxkMigpKSkgeworICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkgewogICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9k
ZSwgbm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0yNjMxLDcgKzI2MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIGlmIChpc1N0
cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgp
LmluZGV4KCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkg
ewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2Rl
LnRha2VuQmxvY2tJbmRleCgpOwpAQCAtMjcyMCw3ICsyNzIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFk
ZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KICAgICAgICAgCi0gICAgICAgIGJvb2wgd2FzUHJp
bWl0aXZlID0gaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bkJvb2xlYW4o
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJvb2wgd2FzUHJpbWl0aXZlID0gaXNLbm93bk51bWVy
aWMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgp
LmluZGV4KCkpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIG9wMSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw3ICszNjAsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBub2RlKQogewotICAg
IGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChpc0tub3duTnVt
ZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAg
LTM3MSw4ICszNzEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVl
CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCi0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKSkpOwotICAgIEFTU0VSVCghaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxk
MSgpKSk7CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgp
KSk7CisgICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OwogICAgIAogICAgIEdQUlJlZyBqc1ZhbHVlR3ByID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBn
cHIgPSByZXN1bHQuZ3ByKCk7CkBAIC00MDQsOSArNDA0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVZhbHVlVG9JbnQzMihOb2RlJiBub2RlKQogewotICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSgpLmluZGV4KCkpKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkg
ewogICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgbV9qaXQubW92ZShv
cDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC01MTIsMTMgKzUxMiwxMyBAQCBKSVRDb21waWxl
cjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkCiAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUlu
ZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2lu
ZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlVXNlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKICAgICAKICAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1
cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogCi0gICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVl
R1BSLCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQ
Uik7CisgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0
eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBz
dG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1
ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwpAQCAtNTU0LDcgKzU1
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICBtX2pp
dC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1JlY29yZChjb2RlT3JpZ2luLCBzdHJ1
Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ssIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxDb21wYWN0KHN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBzbG93Q2FzZSwgZG9u
ZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVl
R1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZUluZGV4IG9w
ZXJhbmQsIGJvb2wgaW52ZXJ0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZUNvbXBhcmVOdWxsKE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOwogICAgIEdQUlJlZyBhcmdHUFIg
PSBhcmcuZ3ByKCk7CkBAIC01NjQsMTMgKzU2NCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsK
ICAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKQorICAgIGlmICghaXNLbm93bkNl
bGwob3BlcmFuZC5pbmRleCgpKSkKICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ0dQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgbV9qaXQudGVz
dDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCks
IHJlc3VsdEdQUik7CiAgICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgeworICAg
IGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkgewogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgbm90Q2VsbC5s
aW5rKCZtX2ppdCk7CkBAIC01ODYsNyArNTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVVc2Ugb3BlcmFuZCwgTm9kZUluZGV4
IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9
IGF0KGJyYW5jaE5vZGVJbmRleCk7CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUu
dGFrZW5CbG9ja0luZGV4KCk7CkBAIC02MDcsMTMgKzYwNywxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
Q2VsbDsKICAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKQorICAgIGlmICghaXNL
bm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkKICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGFyZ0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgYWRk
QnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklU
Q29tcGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0
dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFrZW4pOwogICAgIAotICAgIGlmICghaXNLbm93bkNl
bGwob3BlcmFuZCkpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpIHsK
ICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwogICAgICAgICAKICAg
ICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC02MjcsNyArNjI3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBub3RUYWtlbik7CiB9CiAKLWJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlQ29tcGFyZU51bGwoTm9kZSYgbm9kZSwgTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0
KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiBu
b2RlLCBOb2RlVXNlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hOb2Rl
SW5kZXggIT0gTm9Ob2RlKSB7CkBAIC02NzIsNyArNjcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93UGF0aDsKICAgICAKLSAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKSkg
fHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAoaXNLbm93bk5v
dEludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2Rl
LmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCkBAIC02OTAsMTQg
KzY5MCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAg
ICAgIGFyZzEudXNlKCk7CiAgICAgICAgIGFyZzIudXNlKCk7CiAgICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMigpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmlu
ZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwogICAgIAogICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZCwgYXJnMUdQ
UiwgYXJnMkdQUiksIHRha2VuKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8ICFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBhZGRCcmFuY2go
bV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgCiAgICAgICAgICAgICBzbG93UGF0aC5saW5r
KCZtX2ppdCk7CkBAIC03MjMsNyArNzIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZQogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
ICAgICAKLSAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93
bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigp
LmluZGV4KCkpKSB7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCkBAIC03NDIsMTQgKzc0MiwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIGFyZzEu
dXNlKCk7CiAgICAgICAgIGFyZzIudXNlKCk7CiAgICAgCi0gICAgICAgIGlmICghaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKS5pbmRleCgpKSkKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigp
KSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQog
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAg
IAogICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0
R1BSKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8
fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlUmVz
dWx0ID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9q
aXQpOwpAQCAtNzk1LDcgKzc5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlUGVlcGgKICAgICBhcmcxLnVzZSgpOwogICAgIGFyZzIudXNlKCk7CiAgICAgCi0gICAgaWYg
KGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkp
KSB7CisgICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93
bkNlbGwobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0
IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhl
IHNhbWUKICAgICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwu
CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBh
cmcxR1BSLCBhcmcyR1BSKSwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CkBAIC04NDQsNyAr
ODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIGFy
ZzEudXNlKCk7CiAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwobm9k
ZS5jaGlsZDEoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAoaXNL
bm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxk
MigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBh
cmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAv
LyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUik7CkBAIC05MTcsMTAgKzkxNywxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgCiAgICAgQ2FsbExpbmtJbmZv
OjpDYWxsVHlwZSBjYWxsVHlwZSA9IG5vZGUub3AgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6Q2Fs
bCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwogICAgIAotICAgIE5vZGVJbmRleCBjYWxsZWVO
b2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxk
KCldOwotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgpOwor
ICAgIE5vZGVVc2UgY2FsbGVlTm9kZVVzZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKV07CisgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNh
bGxlZU5vZGVVc2UpOwogICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAg
dXNlKGNhbGxlZU5vZGVJbmRleCk7CisgICAgdXNlKGNhbGxlZU5vZGVVc2UpOwogICAgIAogICAg
IC8vIFRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5j
dGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQogICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCku
IHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCkBAIC05MzEsMTAgKzkzMSwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgbV9qaXQu
c3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxsRnJhbWVTbG90KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7
CiAgICAgCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAg
ICAgICAgTm9kZUluZGV4IGFyZ05vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGls
ZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnKHRoaXMsIGFyZ05vZGVJbmRleCk7CisgICAgICAgIE5vZGVVc2UgYXJnTm9kZVVzZSA9IG1f
aml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ05vZGVVc2UpOwogICAgICAgICBH
UFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnTm9kZUluZGV4KTsKKyAg
ICAgICAgdXNlKGFyZ05vZGVVc2UpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
YXJnR1BSLCBhcmd1bWVudFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CiAgICAgfQpAQCAt
MTQ1OSw5ICsxNDU5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFs
aQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgaWYgKCFw
cmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUuY2hpbGQxKCku
aW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIGlmICghcHJlZGlj
dGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hp
bGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCBub2RlLmNoaWxkMigpLmluZGV4
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKICAgICAKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUp
LCByZXN1bHRHUFIpOwpAQCAtMTUxMSw3ICsxNTExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgCiAgICAgR1BS
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBpZiAoaXNLbm93bk5vdE51bWJlcihub2RlLmNoaWxk
MSgpKSB8fCBpc0tub3duTm90TnVtYmVyKG5vZGUuY2hpbGQyKCkpKQorICAgIGlmIChpc0tub3du
Tm90TnVtYmVyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2Rl
LmNoaWxkMigpLmluZGV4KCkpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
QWRkTm90TnVtYmVyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BSKTsKICAgICBlbHNlCiAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdC5ncHIoKSwgb3Ax
R1BSLCBvcDJHUFIpOwpAQCAtMTUxOSwxNiArMTUxOSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVVc2Ugbm9kZVVzZSwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7Ci0gICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTE1MzcsNyAr
MTUzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBp
ZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVVc2UsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3Vs
dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oVmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CiAgICAgCkBAIC0xNTQ4
LDcgKzE1NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25C
b29sZWFuKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAKQEAgLTE2MjMsMTYgKzE2MjMsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbiwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhl
ckJyYW5jaChOb2RlVXNlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90
VGFrZW4sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBib29sIG5lZWRTcGVjdWxhdGlvbkNo
ZWNrKQogewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CisgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobmVlZFNw
ZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OmNs
YXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZv
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpjbGFzc0lu
Zm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsK
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5s
aW5rKCZtX2ppdCk7CkBAIC0xNjQwLDcgKzE2NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0T2JqZWN0T3JPdGhlckJyCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAg
ICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBtX2ppdC5hbmRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAg
ICAgfQogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CkBAIC0xNjU2LDcgKzE2NTYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUu
bm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCi0gICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUu
Y2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24g
PSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgCiAgICAgICAgIGlmICh0YWtlbiA9
PSAobV9ibG9jayArIDEpKSB7CkBAIC0xODc5LDE4ICsxODc5LDE4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJp
dE9yOgogICAgIGNhc2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkpKSB7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDEoKSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9w
LCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpLCBvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUuY2hpbGQyKCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSwg
b3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTkwOSwx
MSArMTkwOSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNo
aWZ0OgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAg
ICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5n
cHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSAmIDB4MWYs
IHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTQ3LDEyICsyMTQ3LDEy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIENvbXBhcmVFcToKLSAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5v
ZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpKSB7CiAgICAgICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChu
b2RlLCBub2RlLmNoaWxkMigpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS5jaGls
ZDIoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSkpIHsKICAgICAgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5v
ZGUuY2hpbGQxKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjY2MSw3ICsyNjYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQnJhbmNoOgotICAgICAgICBpZiAoaXNTdHJpY3RJ
bnQzMihub2RlLmNoaWxkMSgpKSB8fCBhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKS5pbmRl
eCgpKSB8fCBhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtl
bkJsb2NrSW5kZXgoKTsKQEAgLTI3MzgsNyArMjczOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Ry
aW5nIHNwZWN1bGF0aW9uIGhlcmUuCiAgICAgICAgIAotICAgICAgICBib29sIHdhc1ByaW1pdGl2
ZSA9IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Cb29sZWFuKG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBib29sIHdhc1ByaW1pdGl2ZSA9IGlzS25vd25OdW1lcmljKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5pbmRl
eCgpKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywyMiArODcsMjIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSYgbgogICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBu
b2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCiAgICAgICAgICAgICB1c2UobV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
Tm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQxKCk7Ci0gICAgICAgIGlmIChjaGlsZDEgPT0g
Tm9Ob2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYg
bm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICBOb2RlVXNlIGNoaWxkMSA9IG5vZGUu
Y2hpbGQxKCk7CisgICAgICAgIGlmICghY2hpbGQxKSB7CisgICAgICAgICAgICBBU1NFUlQoIW5v
ZGUuY2hpbGQyKCkgJiYgIW5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIHVzZShjaGlsZDEpOwogICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4
IGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7Ci0gICAgICAgIGlmIChjaGlsZDIgPT0gTm9Ob2RlKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICBO
b2RlVXNlIGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7CisgICAgICAgIGlmICghY2hpbGQyKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIW5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIHVzZShjaGlsZDIpOwogICAgICAgICAKLSAgICAgICAgTm9kZUlu
ZGV4IGNoaWxkMyA9IG5vZGUuY2hpbGQzKCk7Ci0gICAgICAgIGlmIChjaGlsZDMgPT0gTm9Ob2Rl
KQorICAgICAgICBOb2RlVXNlIGNoaWxkMyA9IG5vZGUuY2hpbGQzKCk7CisgICAgICAgIGlmICgh
Y2hpbGQzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB1c2UoY2hpbGQzKTsKICAgICB9
CkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bWFya0NlbGxDYXJkKE1h
Y3JvQQogI2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRl
QmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJS
ZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2lu
ZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KG93bmVyR1BSKTsKICAgICBVTlVTRURfUEFSQU0odmFsdWVHUFIpOwpAQCAtMjU3LDcgKzI1Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaDIpOwogICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKIAotICAgIGlmIChp
c0tub3duTm90Q2VsbCh2YWx1ZUluZGV4KSkKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVV
c2UuaW5kZXgoKSkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0
ZUJhcnJpZXIoR1BSUmVnCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2VsbDsK
ICAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOwotICAgIGlmICghaXNLbm93bkNlbGwodmFs
dWVJbmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZUlu
ZGV4KSkpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLmluZGV4KCkpICYmICFpc0Nl
bGxQcmVkaWN0aW9uKG1faml0LmdldFByZWRpY3Rpb24odmFsdWVVc2UuaW5kZXgoKSkpKSB7CiAg
ICAgICAgIGhhZENlbGxDaGVjayA9IHRydWU7CiAgICAgICAgIHJoc05vdENlbGwgPSBtX2ppdC5i
cmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOwogICAgIH0KQEAgLTMyNSwxNCArMzI1LDE0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICNlbmRpZgogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVl
R1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBH
UFJSZWcgc2NyYXRjaCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVz
ZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVy
KTsKICAgICBVTlVTRURfUEFSQU0odmFsdWVHUFIpOwogICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
KTsKICAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CiAKLSAgICBpZiAoaXNLbm93bk5vdENlbGwo
dmFsdWVJbmRleCkpCisgICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLmluZGV4KCkpKQog
ICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCkBA
IC0zNDIsNyArMzQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2Vs
bAogI2lmIEVOQUJMRShHR0MpCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2VsbDsKICAg
ICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVJ
bmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZUluZGV4
KSkpIHsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLmluZGV4KCkpICYmICFpc0NlbGxQ
cmVkaWN0aW9uKG1faml0LmdldFByZWRpY3Rpb24odmFsdWVVc2UuaW5kZXgoKSkpKSB7CiAgICAg
ICAgIGhhZENlbGxDaGVjayA9IHRydWU7CiAgICAgICAgIHJoc05vdENlbGwgPSBtX2ppdC5icmFu
Y2hJZk5vdENlbGwodmFsdWVHUFIpOwogICAgIH0KQEAgLTM4Myw3ICszODMsNyBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlU3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAg
aWYgKCFpbnZlcnQgJiYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25O
dW1lcmljKG5vZGUuY2hpbGQyKCkpKSkKKyAgICBpZiAoIWludmVydCAmJiAoaXNLbm93bk51bWVy
aWMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMigp
LmluZGV4KCkpKSkKICAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSk7CiAgICAgCiAg
ICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CkBA
IC04MzEsOSArODMxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2Jq
ZQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCiAgICAgaWYgKCFwcmVkaWN0
aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KG9wMUdQUiksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJ
bmZvKSkpOwogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMigpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MkdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLmluZGV4KCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKICAgICAKICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CiAgICAgaWYg
KG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBAIC04NTUsMTMgKzg1NSwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlCiAgICAgICAgIG5vdFRha2VuID0gdG1w
OwogICAgIH0KIAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAg
ICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsK
KyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKKyAgICAg
ICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4
KCkpOwogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIEpJVENv
bXBpbGVyOjpJbW0zMihpbW0pLCBvcDIuZ3ByKCkpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgaW50MzJfdCBpbW0g
PSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKKyAgICAgICAgaW50MzJfdCBp
bW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOwogICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIEpJVENvbXBp
bGVyOjpJbW0zMihpbW0pKSwgdGFrZW4pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKQEAgLTkxMyw3ICs5MTMs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlCiB7CiAgICAgQVNT
RVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNldE5vZGVJbmRleEZvck9wZXJh
bmQobm9kZS5jaGlsZDEoKSwgbm9kZS5sb2NhbCgpKTsKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVy
YW5kKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZS5sb2NhbCgpKTsKICAgICBtX2xhc3RTZXRP
cGVyYW5kID0gbm9kZS5sb2NhbCgpOwogfQogCkBAIC0xMjg5LDcgKzEyODksNyBAQCBWYWx1ZVJl
Y292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsCiAgICAgICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQz
MlRvTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQ
dHItPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2Rl
UHRyLT5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmYXQobm9k
ZUluZGV4KTsKICAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9k
ZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwogICAgICAgICAgICAgICAgIGlmIChpbmZvUHRyLT5h
bGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKQEAgLTE1OTQsMTYg
KzE1OTQsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVAogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkoR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSkKIHsKLSAgICBOb2RlSW5kZXggYmFzZUlu
ZGV4ID0gbm9kZS5jaGlsZDEoKTsKLSAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hp
bGQzKCk7CisgICAgTm9kZVVzZSBiYXNlVXNlID0gbm9kZS5jaGlsZDEoKTsKKyAgICBOb2RlVXNl
IHZhbHVlVXNlID0gbm9kZS5jaGlsZDMoKTsKICAgICAKLSAgICBpZiAoIWlzQnl0ZUFycmF5UHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUoYmFzZUluZGV4KS5tX3R5cGUpKQotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBi
YXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKKyAgICBp
ZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkubV90eXBl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlKSwgYmFzZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNs
YXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQnl0ZUFy
cmF5OjpzX2luZm8pKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwogICAgIEdQUlJlZyB2YWx1
ZUdQUjsKIAotICAgIGlmIChhdCh2YWx1ZUluZGV4KS5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQodmFsdWVJbmRleCk7CisgICAgaWYg
KGF0KHZhbHVlVXNlKS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQodmFsdWVVc2UuaW5kZXgoKSk7CiAgICAgICAgIGlmICghanNWYWx1
ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKQEAgLTE2MTUsOCArMTYxNSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckIKICAgICAgICAgbV9qaXQubW92ZShJbW0zMihjbGFt
cGVkVmFsdWUpLCBzY3JhdGNoUmVnKTsKICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CiAg
ICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKLSAgICB9IGVsc2UgaWYgKCFhdCh2YWx1ZUlu
ZGV4KS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKKyAgICB9IGVsc2UgaWYgKCFh
dCh2YWx1ZVVzZSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3Jh
dGNoLmdwcigpOwogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hSZWcp
OwpAQCAtMTYyNCw3ICsxNjI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9yQgogICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKICAgICAgICAgdmFsdWVHUFIg
PSBzY3JhdGNoUmVnOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKICAgICAg
ICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CkBAIC0xNzQ1LDE2ICsxNzQ1LDE2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYg
bm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVu
dHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKIHsKLSAgICBOb2RlSW5kZXggYmFzZUlu
ZGV4ID0gbm9kZS5jaGlsZDEoKTsKLSAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hp
bGQzKCk7CisgICAgTm9kZVVzZSBiYXNlVXNlID0gbm9kZS5jaGlsZDEoKTsKKyAgICBOb2RlVXNl
IHZhbHVlVXNlID0gbm9kZS5jaGlsZDMoKTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1
aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
KSwgYmFzZVVzZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CiAg
ICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwogICAgIEdQUlJlZyB2YWx1ZUdQUjsKICAgICAKLSAgICBp
ZiAoYXQodmFsdWVJbmRleCkuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUganNWYWx1
ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlSW5kZXgpOworICAgIGlmIChhdCh2YWx1ZVVzZSku
aXNDb25zdGFudCgpKSB7CisgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KHZhbHVlVXNlLmluZGV4KCkpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkg
ewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CkBAIC0xNzcwLDggKzE3NzAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JJCiAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIoc3RhdGljX2Nhc3Q8aW50Pihk
KSksIHNjcmF0Y2hSZWcpOwogICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKICAgICAgICAg
dmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxzZSBpZiAoIWF0KHZhbHVlSW5kZXgpLnNo
b3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlSW5kZXgpOworICAgIH0gZWxzZSBpZiAoIWF0KHZhbHVl
VXNlKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3By
KCk7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7CkBAIC0x
NzgzLDcgKzE3ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJ
CiAgICAgICAgIHZhbHVlR1BSID0gc2NyYXRjaFJlZzsKICAgICB9IGVsc2UgaWYgKHJvdW5kaW5n
ID09IENsYW1wUm91bmRpbmcpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwot
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVJbmRleCk7
CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEZQUlRlbXBvcmFy
eSBmbG9hdFNjcmF0Y2godGhpcyk7CiAgICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigp
OwpAQCAtMTc5Miw3ICsxNzkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9ySQogICAgICAgICB2YWx1ZS5hZG9wdChyZXN1bHQpOwogICAgICAgICB2YWx1ZUdQUiA9
IGdwcjsKICAgICB9IGVsc2UgewotICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVl
T3AodGhpcywgdmFsdWVJbmRleCk7CisgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFs
dWVPcCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIEZQUlJlZyBmcHIgPSB2YWx1ZU9wLmZwcigpOwogICAgICAgICBHUFJSZWcgZ3By
ID0gcmVzdWx0LmdwcigpOwpAQCAtMTg5MSwxMyArMTg5MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYgbm9kZSwgc2l6ZV90
IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRp
b25SZXF1aXJlbWVudHMpCiB7Ci0gICAgTm9kZUluZGV4IGJhc2VJbmRleCA9IG5vZGUuY2hpbGQx
KCk7Ci0gICAgTm9kZUluZGV4IHZhbHVlSW5kZXggPSBub2RlLmNoaWxkMygpOworICAgIE5vZGVV
c2UgYmFzZVVzZSA9IG5vZGUuY2hpbGQxKCk7CisgICAgTm9kZVVzZSB2YWx1ZVVzZSA9IG5vZGUu
Y2hpbGQzKCk7CiAgICAgCi0gICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMs
IHZhbHVlSW5kZXgpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2
YWx1ZVVzZSk7CiAgICAgCiAgICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlw
ZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VVc2UuaW5kZXgo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKSk7CiAgICAgCiAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKQEAgLTIwNDIsOCArMjA0Miw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlJlZyBvcDFH
cHIgPSBvcDEuZ3ByKCk7CiAKLSAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkp
KSB7Ci0gICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKCkpOworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgp
KSkgeworICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpOwogICAgICAgICBpZiAoZGl2aXNvciA8IDApCiAgICAgICAgICAg
ICBkaXZpc29yID0gLWRpdmlzb3I7CiAKQEAgLTIxOTksOCArMjE5OSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVBZGQoTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUsIG1faml0LmNvZGVCbG9jaygpKSkgewotICAgICAgICBpZiAoaXNO
dW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0x
ID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgeworICAgICAgICAg
ICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxk
MSgpLmluZGV4KCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIApAQCAtMjIxNCw5ICsyMjE0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFk
ZChOb2RlJiBubwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
ICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIo
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVy
Q29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMjI3
OSw5ICsyMjc5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlJiBubwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZGUmIG5vZGUpCiB7CiAgICAg
aWYgKG1faml0LmdyYXBoKCkuYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLCBtX2ppdC5j
b2RlQmxvY2soKSkpIHsKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDIo
KSkpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgp
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0
YW50QXNJbnQzMihub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZh
bHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICAgICAgICAgIGlmIChub2Rl
Q2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKQEAgLTIyOTQsOCAr
MjI5NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc051
bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEg
PSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAgICAgICAg
ICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgICAgIApAQCAtMjQyMSw3ICsyNDIxLDcgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IHZhbHVlLCBKU1ZhbHVlIGNvbnN0YW50KQorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9kZSYgbm9kZSwgTm9kZVVzZSB2YWx1ZSwgSlNWYWx1
ZSBjb25zdGFudCkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgdmFsdWUpOwogICAg
IApAQCAtMjQ5OCwxNCArMjQ5OCwxNCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3Ry
aWN0RXEoTm9kCiAgICAgLy8gMSkgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBjb25zdGFudCBhbmQg
dGhhdCBjb25zdGFudCBpcyBub3QgYSBkb3VibGUsIGludGVnZXIsCiAgICAgLy8gICAgb3Igc3Ry
aW5nLCB0aGVuIGRvIGEgSlNWYWx1ZSBjb21wYXJpc29uLgogICAgIAotICAgIGlmIChpc0pTQ29u
c3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0pTQ29uc3RhbnQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigp
ICYmICF2YWx1ZS5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVTdHJpY3RF
cUZvckNvbnN0YW50KG5vZGUsIG5vZGUuY2hpbGQyKCksIHZhbHVlKTsKICAgICB9CiAgICAgCi0g
ICAgaWYgKGlzSlNDb25zdGFudChub2RlLmNoaWxkMigpKSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CisgICAgaWYgKGlzSlNDb25z
dGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOwogICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4g
Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9kZS5jaGlsZDEoKSwgdmFsdWUpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4MiwxMCBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwogICAg
IH0KKyAgICBOb2RlJiBhdChOb2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICByZXR1cm4g
YXQobm9kZVVzZS5pbmRleCgpKTsKKyAgICB9CiAgICAgCiAgICAgR1BSUmVnIGZpbGxJbnRlZ2Vy
KE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKICAgICBGUFJSZWcgZmlsbERv
dWJsZShOb2RlSW5kZXgpOwpAQCAtMjE4LDYgKzIyMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
ICAgICAgICByZXR1cm4gaW5mby5jYW5SZXVzZSgpOwogICAgIH0KKyAgICBib29sIGNhblJldXNl
KE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjYW5SZXVzZShub2RlVXNl
LmluZGV4KCkpOworICAgIH0KICAgICBHUFJSZWcgcmV1c2UoR1BSUmVnIHJlZykKICAgICB7CiAg
ICAgICAgIG1fZ3Bycy5sb2NrKHJlZyk7CkBAIC0zMTgsMTMgKzMyNiwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLmdwcigpKTsKICNlbmRpZgogICAgIH0KKyAg
ICB2b2lkIHVzZShOb2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICB1c2Uobm9kZVVzZS5p
bmRleCgpKTsKKyAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBtYXJrQ2VsbENhcmQoTWFjcm9Bc3Nl
bWJsZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0
Y2hHUFIyKTsKICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImLCBH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBX
cml0ZUJhcnJpZXJVc2VLaW5kKTsKIAotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25l
ckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVy
VXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVz
ZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNo
R1BSMiA9IEludmFsaWRHUFJSZWcpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25l
ckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hH
UFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7
Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBO
b2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hH
UFIxID0gSW52YWxpZEdQUlJlZyk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlVXNlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5k
LCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKIAogICAgIHN0YXRpYyBHUFJS
ZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BS
UmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlk
R1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxpZEdQUlJlZykKICAgICB7CkBAIC04NzUs
NyArODg3LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUg
aXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgogICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IGF0KGxh
c3ROb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNoICYmIGxh
c3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6IE5vTm9k
ZTsKKyAgICAgICAgcmV0dXJuIGxhc3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGls
ZDEoKS5pbmRleCgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6IE5vTm9kZTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYp
OwpAQCAtODg1LDE1ICs4OTcsMTUgQEAgcHJpdmF0ZToKICAgICBlbnVtIFNwaWxsUmVnaXN0ZXJz
TW9kZSB7IE5lZWRUb1NwaWxsLCBEb250U3BpbGwgfTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVy
OjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKLSAgICB2b2lkIGNh
Y2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgTm9kZUlu
ZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCkpOworICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZSwgR1BSUmVnIHZhbHVlLCBOb2RlVXNlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJS
ZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0
VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0g
SklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwot
ICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIs
IEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgTm9kZUluZGV4IHZh
bHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
dXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpK
dW1wKCkpOworICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBh
eWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgTm9k
ZVVzZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSk7CiAjZW5kaWYKIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZUNvbXBhcmVOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKLSAg
ICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5k
LCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCA9IGZhbHNlKTsKLSAgICBi
b29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYsIE5vZGVJbmRleCBvcGVyYW5kLCBi
b29sIGludmVydCA9IGZhbHNlKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlTnVsbChOb2RlVXNlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIHZv
aWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZVVzZSBvcGVyYW5kLCBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCA9IGZhbHNlKTsKKyAgICBib29sIG5v
blNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYsIE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZl
cnQgPSBmYWxzZSk7CiAgICAgCiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKICAgICB2
b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9u
KTsKQEAgLTE1MDUsMTUgKzE1MTcsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVQZWVw
SG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBjb25z
dCBDbGFzc0luZm8qLCBQcmVkaWN0aW9uQ2hlY2tlcik7CiAgICAgdm9pZCBjb21waWxlT2JqZWN0
RXF1YWxpdHkoTm9kZSYsIGNvbnN0IENsYXNzSW5mbyosIFByZWRpY3Rpb25DaGVja2VyKTsKICAg
ICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IHZhbHVlLCBjb25zdCBDbGFzc0luZm8qLCBib29sIG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNh
bE5vdChOb2RlVXNlIHZhbHVlLCBjb25zdCBDbGFzc0luZm8qLCBib29sIG5lZWRTcGVjdWxhdGlv
bkNoZWNrKTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUmKTsKLSAgICB2b2lkIGVt
aXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbiwgY29uc3QgQ2xhc3NJbmZvKiwgYm9vbCBuZWVkU3BlY3VsYXRp
b25DaGVjayk7CisgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlVXNlIHZhbHVl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBjb25zdCBDbGFzc0luZm8q
LCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSYp
OwogICAgIAogICAgIHZvaWQgY29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlRG91YmxlQ29tcGFy
ZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbik7CiAgICAgCi0gICAgYm9v
bCBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChOb2RlJiwgTm9kZUluZGV4IHZhbHVlLCBKU1Zh
bHVlIGNvbnN0YW50KTsKKyAgICBib29sIGNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KE5vZGUm
LCBOb2RlVXNlIHZhbHVlLCBKU1ZhbHVlIGNvbnN0YW50KTsKICAgICAKICAgICBib29sIGNvbXBp
bGVTdHJpY3RFcShOb2RlJik7CiAgICAgCkBAIC0xNTkzLDYgKzE2MDUsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9T
UkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2ZpbGVGb3Io
bm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOwogICAgIH0KKyAgICB2b2lkIHNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2Rl
VXNlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCisgICAgeworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2UuaW5kZXgo
KSwganVtcFRvRmFpbCk7CisgICAgfQogICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxhdGlvbiBj
aGVja3Mgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRl
eCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiAgICAg
ewpAQCAtMTYwMCw2ICsxNjE2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBKdW1wVmVjdG9yLnNpemUoKTsgKytpKQogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIEp1bXBWZWN0b3JbaV0pOwog
ICAgIH0KKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlVXNlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYganVtcHNUb0ZhaWwpCisgICAgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG5vZGVVc2UuaW5kZXgoKSwganVtcHNUb0ZhaWwpOworICAgIH0KICAg
ICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAg
ICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiAgICAgewpAQCAt
MTYwOCw2ICsxNjI4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC52
YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJs
b2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKICAgICB9CisgICAgdm9p
ZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTm9kZVVzZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBj
b25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9G
YWlsLCByZWNvdmVyeSk7CisgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxs
eSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFs
dWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQpAQCAtMTYyMCw2ICsxNjQ0LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVJbmRl
eCwgbV9qaXQuanVtcCgpKTsKICAgICAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogICAgIH0K
KyAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5p
bmRleCgpKTsKKyAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiAgICAgR1BS
UmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVy
bkZvcm1hdCk7CkBAIC0xNzEyLDE2ICsxNzQwLDE2IEBAIHByaXZhdGU6CiAKIGNsYXNzIEludGVn
ZXJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxh
dGl2ZUpJVCogaml0LCBOb2RlSW5kZXggaW5kZXgpCisgICAgZXhwbGljaXQgSW50ZWdlck9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0
KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgo
KSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICNlbmRpZgogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQor
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGdwcigpOwog
ICAgIH0KIApAQCAtMTc2NCwxMyArMTc5MiwxMyBAQCBwcml2YXRlOgogCiBjbGFzcyBEb3VibGVP
cGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZl
SklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBEb3VibGVPcGVyYW5kKFNw
ZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVVc2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCiAg
ICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2ppdCk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkRG91YmxlKGluZGV4KSkKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUobV9pbmRleCkpCiAgICAgICAgICAgICBmcHIo
KTsKICAgICB9CiAKQEAgLTE4MDUsOSArMTgzMyw5IEBAIHByaXZhdGU6CiAKIGNsYXNzIEpTVmFs
dWVPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxh
dGl2ZUpJVCogaml0LCBOb2RlSW5kZXggaW5kZXgpCisgICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0
KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgo
KSkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRH
UFJSZWcpCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTgxNiwxMiArMTg0NCwxMiBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobV9pbmRleCkpCiAgICAgICAgICAgICBncHIoKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci50YWdHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAg
ICAgICBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9p
bmRleCkpCiAgICAgICAgICAgICBmaWxsKCk7CiAjZW5kaWYKICAgICB9CkBAIC0xOTE5LDEzICsx
OTQ3LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlSW5kZXgg
aW5kZXgpCisgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
Tm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZCht
X2luZGV4KSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAKQEAgLTIwODgsMTYgKzIx
MTYsMTYgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgewogcHVi
bGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChq
aXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRl
eCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5E
RUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkp
CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7
CiAgICAgfQogCkBAIC0yMTM1LDEzICsyMTYzLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkK
KyAgICBleHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2dw
ck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsK
LSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KIApAQCAtMjE3NiwxMyAr
MjIwNCwxMyBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVVc2UgdXNlKQogICAgICAgICA6IG1faml0KGpp
dCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4
KCkpCiAgICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCiAgICAgICAgICAgICBmcHIoKTsKICAg
ICB9CiAKQEAgLTIyMTIsMTMgKzIyNDAsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5k
KFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBTcGVj
dWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAg
ICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2lu
ZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAg
ICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yMjUzLDEzICsyMjgxLDEzIEBAIHByaXZhdGU6CiAKIGNs
YXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVj
dWxhdGVCb29sZWFuT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlSW5kZXggaW5kZXgp
CisgICAgZXhwbGljaXQgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2dwck9y
SW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChtX2luZGV4KSkKICAgICAgICAgICAgIGdwcigpOwogICAgIH0KICAgICAK
</data>
<flag name="commit-queue"
          id="127057"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125538</attachid>
            <date>2012-02-05 15:27:56 -0800</date>
            <delta_ts>2012-02-05 17:22:39 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>nodeuse_patch_5.diff</filename>
            <type>text/plain</type>
            <size>123338</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NzY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMi0wMi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRydzIGNoaWxkIHJlZmVyZW5jZXMgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyIHNob3VsZCBo
YXZlIHJvb20gZm9yIHR5cGUgaW5mb3JtYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Nzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgREZHOjpOb2RlOjpjaGlsZCBmaWVsZHMg
bm93IGNvbnRhaW4gYm90aCBhIERGRzo6Tm9kZUluZGV4ICh3aGljaCBpcyBqdXN0IGFuIHVuc2ln
bmVkKQorICAgICAgICBhbmQgYSBERkc6OlVzZUtpbmQgKHdoaWNoIGlzIGN1cnJlbnRseSBhbiBl
ZmZlY3RpdmVseSBlbXB0eSBlbnVtKS4gVGhleSBhcmUgZW5jYXBzdWxhdGVkCisgICAgICAgIHRv
Z2V0aGVyIGFzIGEgREZHOjpOb2RlVXNlLCB3aGljaCBjYW4gaW4gbW9zdCBjYXNlcyBzdGlsbCBi
ZSB1c2VkIGFzIGFuIGluZGV4IChmb3IKKyAgICAgICAgZXhhbXBsZSBERkc6OkdyYXBoLCBBYnN0
cmFjdFN0YXRlLCBhbmQgU3BlY3VsYXRpdmVKSVQgYWxsIGFjY2VwdCBOb2RlVXNlIGluIG1vc3Qg
cGxhY2VzCisgICAgICAgIHdoZXJlIHRoZXkgcmVhbGx5IHdhbnQgYSBOb2RlSW5kZXgpLgorICAg
ICAgICAKKyAgICAgICAgVGhlIE5vZGVVc2Ugc3RvcmVzIGJvdGggdGhlIGluZGV4IGFuZCB0aGUg
VXNlS2luZCB3aXRob3V0IGJsb2F0aW5nIHRoZSBtZW1vcnkgdXNhZ2Ugb2YKKyAgICAgICAgREZH
OjpOb2RlLCBzaW5jZSB3ZSByZWFsbHkgZG9uJ3QgbmVlZCBmdWxsIDMyIGJpdHMgZm9yIHRoZSBO
b2RlSW5kZXggKGEgREZHOjpOb2RlIGlzCisgICAgICAgIHJvdWdobHkgMTEgd29yZHMsIHNvIGlm
IHdlIGFzc3VtZSB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gdXNlIG1vcmUgdGhhbiAxR0IgdG8gREZH
IGNvbXBpbGUKKyAgICAgICAgc29tZXRoaW5nIC0gbGlrZWx5IGEgc2Vuc2libGUgYXNzdW1wdGlv
biEgLSB0aGVuIHdlIHdpbGwgb25seSBiZSBhYmxlIHRvIGhhdmUgcm9vbSBmb3IKKyAgICAgICAg
YWJvdXQgMjQgbWlsbGlvbiBub2Rlcywgd2hpY2ggbWVhbnMgd2Ugb25seSBuZWVkIGFib3V0IDI0
LjUgYml0cyBmb3IgdGhlIG5vZGUgaW5kZXgpLgorICAgICAgICBDdXJyZW50bHkgdGhlIERGRzo6
Tm9kZVVzZSBhbGxvY2F0ZXMgNCBiaXRzIGZvciB0aGUgVXNlS2luZCBhbmQgMjggYml0cyBmb3Ig
dGhlIGluZGV4LAorICAgICAgICBidXQgc3RvcmVzIHRoZSBpbmRleCBhcyBhIHNpZ25lZCBudW1i
ZXIgdG8gbWFrZSBOb05vZGUgd29yayBuYXR1cmFsbHkuIEhlbmNlIHdlIHJlYWxseQorICAgICAg
ICBqdXN0IGhhdmUgMjcgYml0cyBmb3IgdGhlIGluZGV4LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIGFsbCBiZW5jaG1hcmtzIHdlIHRyYWNrLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRWYXJBcmdDaGlsZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6b3Bl
cmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmF0KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cmVmKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWYpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbGVhckFuZERlcmVmQ2hpbGQxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZDMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpnZXRQcmVkaWN0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtQ2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmR1bXBDaGlsZHJlbik6CisgICAgICAgIChOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVJlZmVyZW5jZUJsb2IuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoTm9kZVJlZmVyZW5jZUJsb2IpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVSZWZlcmVuY2VCbG9iOjpOb2RlUmVmZXJlbmNlQmxvYik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJl
bmNlQmxvYjo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6
Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQzKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQxVW5jaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXROdW1DaGlsZHJlbik6CisgICAgICAgICogZGZnL0RG
R05vZGVVc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoTm9kZVVzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6Tm9kZVVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVVzZTo6aW5kZXhVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Omlu
ZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVXNlOjpzZXRJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZVVzZTo6dXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6
c2V0VXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6aXNTZXQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZVVzZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVVc2U6Om1ha2VXb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFn
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnZvdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmNh
bm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c3RhcnRJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRCeVZhbExvYWRFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1TdWJzdGl0dXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAg
ICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9h
cmQ6OnVzZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckJ5dGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmF0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FuUmV1c2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp1c2UpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVwSG9sZUJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6SlNWYWx1ZU9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OlNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6OlNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRl
RG91YmxlT3BlcmFuZDo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRv
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1
ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDEyLTAyLTA1ICBHeXV5b3Vu
ZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXSBTdXBw
b3J0IGphdmFzY3JpcHRjb3JlIHRlc3QgZm9yIEVGTCBwb3J0LiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODEsNiArODEsOCBAQAogCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3OTE0M0ZD
RDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQ
YWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsg
fTsKKwkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0
REYzRjEzMDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2RTE2QzE0REYzRjE2MDBCN0Iy
RTQgLyogREZHTm9kZVVzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR05vZGVVc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJG
RjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZH
Q0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMz
Q0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0Nh
cGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC04NzUsNiArODc3LDggQEAKIAkJMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R09wZXJhbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wZXJhbmRz
Lmg7IHBhdGggPSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR05v
ZGVSZWZlcmVuY2VCbG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05v
ZGVSZWZlcmVuY2VCbG9iLmg7IHBhdGggPSBkZmcvREZHTm9kZVJlZmVyZW5jZUJsb2IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERG
R05vZGVVc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZVVzZS5o
OyBwYXRoID0gZGZnL0RGR05vZGVVc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3
QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ1OCw2ICsyNDYyLDggQEAKIAkJCQk4NkVDOURC
QjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuY3BwICovLAogCQkJCTg2RUM5REJD
MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICovLAogCQkJCTg2RUNBM0U5MTMy
REVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCisJCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdC
MkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmggKi8sCisJCQkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR05vZGVVc2UuaCAqLywKIAkJCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0Mg
LyogREZHT3BlcmFuZHMuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZH
T3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09w
ZXJhdGlvbnMuaCAqLywKQEAgLTMxMjAsNiArMzEyNiw4IEBACiAJCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1
MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdOb2RlVXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJl
Z2luXTsKICAgICB9CiAgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlVXNlIG5v
ZGVVc2UpCisgICAgeworICAgICAgICByZXR1cm4gZm9yTm9kZShub2RlVXNlLmluZGV4KCkpOwor
ICAgIH0KKyAgICAKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5p
dGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8g
aW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4
ZWN1dGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhb
bm9kZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09
IFBoaSkgewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNzksNyArMTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9
PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBu
b2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5p
bmRleCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBv
cmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMjE5LDcgKzIxOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQx
KCldOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09IFBoaSkgewogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZs
dXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBu
b2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGls
ZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBAIC0yMzgsNyArMjM4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
dHItPmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpOwpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAKICAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRz
IGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7
CkBAIC01NzIsNyArNTcyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgdm9pZCBhZGRWYXJBcmdD
aGlsZChOb2RlSW5kZXggY2hpbGQpCiAgICAgewotICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFw
cGVuZChOb2RlVXNlKGNoaWxkKSk7CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncysrOwogICAg
IH0KICAgICAKQEAgLTIyNDEsOSArMjI0MSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1s
b2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCiAgICAgICAg
ICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRo
ZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKICAgICAgICAgICAgICAgICAvLyBhbmQgUGhp
cyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxl
LgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
Y2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3Jh
cGhbbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpLmluZGV4KCldLnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1ZUlu
UHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAg
ICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7CkBAIC0yMjY2LDExICsyMjY2
LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpID09IE5vTm9kZSkgeworICAgICAgICAg
ICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNl
bmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZh
bHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSA9IE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGls
ZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5k
dW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyNzgsMTEgKzIyNzgsMTEgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09
IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmlu
dGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFs
dWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBw
aGlOb2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IE5vZGVVc2UodmFsdWVJblByZWRlY2Vzc29yKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyOTAsMTEgKzIy
OTAsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHBoaU5vZGUtPmNoaWxkMygpID09IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LT5jaGlsZDMoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUu
XG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3Nv
cjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2Uo
dmFsdWVJblByZWRlY2Vzc29yKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rk
b3V0KTsKQEAgLTIzMTQsOSArMjMxNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQ
aGlTdGFjaygpCiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBuZXdQaGlOb2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSA9IHBoaU5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgbmV3
UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBwaGlOb2RlLT5jaGlsZDIoKTsKLSAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS0+Y2hpbGQz
KCk7CisgICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47
CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAg
ICBwcmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgbmV3UGhpKTsKQEAgLTIzMjQsOSAr
MjMyMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLmZpeGVkLmNoaWxkMSA9IG5ld1BoaTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVu
LmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIHBoaU5vZGUtPmNo
aWxkcmVuLmNoaWxkMSgpID0gTm9kZVVzZShuZXdQaGkpOworICAgICAgICAgICAgcGhpTm9kZS0+
Y2hpbGRyZW4uY2hpbGQyKCkgPSBOb2RlVXNlKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAg
ICAgICBwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UoTm9Ob2RlKTsKIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIHByaW50
ZigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBlbnRyeS5tX3BoaSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzky
LDExIEBAIHN0cnVjdCBOb2RlSW5kZXhUcmFpdHMgewogICAgIH0KIH07CiAKK2VudW0gVXNlS2lu
ZCB7CisgICAgVW50eXBlZFVzZSwKKyAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0
aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhlIG51
bWJlciBvZiBlbnVtIGVsZW1lbnRzLgorfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywxNiArMTYzLDE2IEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgICAgICAgICBw
cmludGYoIiwgIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBwcmludGYoIkAldSIsIG1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKTsKKyAgICAgICAgICAgIHByaW50ZigiQCV1IiwgbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0uaW5kZXgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSAhPSBOb05vZGUpCi0gICAgICAgICAgICBwcmludGYoIkAldSIsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSAhPSBOb05vZGUpCi0gICAgICAgICAg
ICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIGlmIChub2RlLmNoaWxk
MygpICE9IE5vTm9kZSkKLSAgICAgICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMygp
KTsKLSAgICAgICAgaGFzUHJpbnRlZCA9IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOworICAgICAg
ICBpZiAoISFub2RlLmNoaWxkMSgpKQorICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2RlLmNo
aWxkMSgpLmluZGV4KCkpOworICAgICAgICBpZiAoISFub2RlLmNoaWxkMigpKQorICAgICAgICAg
ICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICgh
IW5vZGUuY2hpbGQzKCkpCisgICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGlsZDMo
KS5pbmRleCgpKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9ICEhbm9kZS5jaGlsZDEoKTsKICAgICB9
CiAKICAgICBpZiAobm9kZS5oYXNBcml0aE5vZGVGbGFncygpKSB7CkBAIC0zMDUsMjAgKzMwNSwy
MCBAQCB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgICAgICAgICAg
ICAgICBfY2hpbGRJZHgrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgICAgIHRoaW5nVG9EbyhtX3ZhckFyZ0NoaWxkcmVuW19jaGlsZElk
eF0pOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYg
KF9ub2RlLmNoaWxkMSgpID09IE5vTm9kZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgICAgIEFTU0VSVChfbm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAmJiBfbm9kZS5jaGls
ZDMoKSA9PSBOb05vZGUpOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFf
bm9kZS5jaGlsZDEoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQyKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAmJiAhX25vZGUuY2hpbGQz
KCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMSgpKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgaWYgKF9ub2RlLmNoaWxkMigpID09IE5vTm9kZSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgIEFTU0VSVChfbm9kZS5jaGlsZDMoKSA9PSBOb05v
ZGUpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCFfbm9kZS5jaGls
ZDIoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgIEFTU0VSVCghX25vZGUuY2hpbGQzKCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAg
dGhpbmdUb0RvKF9ub2RlLmNoaWxkMigpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKF9ub2RlLmNoaWxkMygpID09
IE5vTm9kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYg
KCFfbm9kZS5jaGlsZDMoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgdGhpbmdUb0RvKF9ub2RlLmNoaWxkMygp
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTA2Njk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw2ICs3MSwxNSBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEgewogLy8gTm9kZXMgdGhh
dCBhcmUgJ2RlYWQnIHJlbWFpbiBpbiB0aGUgdmVjdG9yIHdpdGggcmVmQ291bnQgMC4KIGNsYXNz
IEdyYXBoIDogcHVibGljIFZlY3RvcjxOb2RlLCA2ND4gewogcHVibGljOgorICAgIHVzaW5nIFZl
Y3RvcjxOb2RlLCA2ND46Om9wZXJhdG9yW107CisgICAgdXNpbmcgVmVjdG9yPE5vZGUsIDY0Pjo6
YXQ7CisgICAgCisgICAgTm9kZSYgb3BlcmF0b3JbXShOb2RlVXNlIG5vZGVVc2UpIHsgcmV0dXJu
IGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAgICBjb25zdCBOb2RlJiBvcGVyYXRvcltdKE5vZGVV
c2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIAor
ICAgIE5vZGUmIGF0KE5vZGVVc2Ugbm9kZVVzZSkgeyByZXR1cm4gYXQobm9kZVVzZS5pbmRleCgp
KTsgfQorICAgIGNvbnN0IE5vZGUmIGF0KE5vZGVVc2Ugbm9kZVVzZSkgY29uc3QgeyByZXR1cm4g
YXQobm9kZVVzZS5pbmRleCgpKTsgfQorICAgIAogICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5n
IHJlZmVyZW5jZWQuCiAgICAgdm9pZCByZWYoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBA
IC03OSwzNSArODgsNDMgQEAgcHVibGljOgogICAgICAgICBpZiAobm9kZS5yZWYoKSkKICAgICAg
ICAgICAgIHJlZkNoaWxkcmVuKG5vZGVJbmRleCk7CiAgICAgfQorICAgIHZvaWQgcmVmKE5vZGVV
c2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHJlZihub2RlVXNlLmluZGV4KCkpOworICAgIH0K
ICAgICAKICAgICB2b2lkIGRlcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBpZiAoYXQobm9kZUluZGV4KS5kZXJlZigpKQogICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihu
b2RlSW5kZXgpOwogICAgIH0KKyAgICB2b2lkIGRlcmVmKE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7
CisgICAgICAgIGRlcmVmKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgfQogICAgIAogICAgIHZvaWQg
Y2xlYXJBbmREZXJlZkNoaWxkMShOb2RlJiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFub2RlLmNoaWxk
MSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLmNoaWxkcmVuLmZp
eGVkLmNoaWxkMSk7Ci0gICAgICAgIG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gTm9Ob2Rl
OworICAgICAgICBkZXJlZihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5j
aGlsZDEoKSA9IE5vZGVVc2UoKTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGls
ZDIoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMiA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIpOwotICAg
ICAgICBub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IE5vTm9kZTsKKyAgICAgICAgZGVyZWYo
bm9kZS5jaGlsZDIoKSk7CisgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBOb2RlVXNl
KCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUmIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMgPT0gTm9Ob2RlKQor
ICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGRlcmVmKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzKTsKLSAgICAgICAgbm9kZS5jaGlsZHJl
bi5maXhlZC5jaGlsZDMgPSBOb05vZGU7CisgICAgICAgIGRlcmVmKG5vZGUuY2hpbGQzKCkpOwor
ICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMygpID0gTm9kZVVzZSgpOwogICAgIH0KIAogICAg
IC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9y
bWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KQEAgLTI1NSw3ICsy
NzIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4g
LCA4PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJl
bjsKKyAgICBWZWN0b3I8Tm9kZVVzZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAgICAgVmVjdG9y
PFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZlY3RvcjxSZXNv
bHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAgICBWZWN0b3I8Tm9kZUluZGV4
LCA4PiBtX2FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3Miw3IEBAIHB1
YmxpYzoKICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBnZXQgcHJlZGljdGlvbnMKICAgICBQcmVk
aWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWN0
aW9uKCk7IH0KICAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gZ2V0UHJlZGljdGlvbihncmFwaCgpW25vZGVJbmRleF0pOyB9CisgICAg
UHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKE5vZGVVc2Ugbm9kZVVzZSkgeyByZXR1cm4gZ2V0
UHJlZGljdGlvbihub2RlVXNlLmluZGV4KCkpOyB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIHZvaWQqIGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTA2Njk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHTm9kZVJlZmVyZW5jZUJs
b2IuaCIKICNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTM0NywzNiArMzQ4LDMzIEBAIHN0
cnVjdCBOb2RlIHsKICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9i
OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdp
c3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQo
IShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxh
Z3MoKSk7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAgICAg
Y2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5j
aGlsZDMgPSBjaGlsZDM7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVw
IHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEg
PSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBO
b05vZGUpCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpGaXhlZCwgY2hpbGQxLCBj
aGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhp
bW0ubV92YWx1ZSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewog
ICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7Ci0gICAgICAgIGNoaWxkcmVu
LmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0g
Y2hpbGQyOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBp
bW1lZGlhdGUgdmFsdWVzLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQog
ICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAg
ICAgLCBjaGlsZHJlbihOb2RlUmVmZXJlbmNlQmxvYjo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3Zh
bHVlKQpAQCAtMzg0LDE1ICszODIsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJl
ZGljdGlvbihQcmVkaWN0Tm9uZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhh
c1ZhckFyZ3MpKTsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQxOwotICAg
ICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBjaGlsZDI7Ci0gICAgICAgIGNoaWxkcmVuLmZp
eGVkLmNoaWxkMyA9IGNoaWxkMzsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9k
ZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZh
bHVlcy4KICAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNp
Z25lZCBudW1DaGlsZHJlbikKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCisgICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OlZhcmlh
YmxlLCBmaXJzdENoaWxkLCBudW1DaGlsZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rl
cihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAg
ICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC00MDAsOCArMzk2LDYgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKLSAgICAgICAgY2hpbGRyZW4udmFyaWFibGUu
Zmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNo
aWxkcmVuID0gbnVtQ2hpbGRyZW47CiAgICAgfQogCiAgICAgYm9vbCBtdXN0R2VuZXJhdGUoKQpA
QCAtODQ1LDQyICs4MzksNDIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gIS0tbV9y
ZWZDb3VudDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoaWxkMSgpCisgICAgTm9kZVVz
ZSBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykp
OwotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4g
Y2hpbGRyZW4uY2hpbGQxKCk7CiAgICAgfQogICAgIAogICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlm
IHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3QgY2hpbGQKICAgICAvLyBi
ZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVzZSB0aGlzIHdpdGggY2Fy
ZSBhbmQKICAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KLSAgICBOb2RlSW5kZXggY2hpbGQx
VW5jaGVja2VkKCkKKyAgICBOb2RlVXNlIGNoaWxkMVVuY2hlY2tlZCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgICAgICByZXR1cm4gY2hpbGRyZW4u
Y2hpbGQxVW5jaGVja2VkKCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMigpCisgICAg
Tm9kZVVzZSBjaGlsZDIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQyOworICAgICAgICBy
ZXR1cm4gY2hpbGRyZW4uY2hpbGQyKCk7CiAgICAgfQogCi0gICAgTm9kZUluZGV4IGNoaWxkMygp
CisgICAgTm9kZVVzZSBjaGlsZDMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2Rl
SGFzVmFyQXJncykpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQzOworICAg
ICAgICByZXR1cm4gY2hpbGRyZW4uY2hpbGQzKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVk
IGZpcnN0Q2hpbGQoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
OwotICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZDsKKyAgICAgICAg
cmV0dXJuIGNoaWxkcmVuLmZpcnN0Q2hpbGQoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQg
bnVtQ2hpbGRyZW4oKQogICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
OwotICAgICAgICByZXR1cm4gY2hpbGRyZW4udmFyaWFibGUubnVtQ2hpbGRyZW47CisgICAgICAg
IHJldHVybiBjaGlsZHJlbi5udW1DaGlsZHJlbigpOwogICAgIH0KICAgICAKICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24oKQpAQCAtMTAzNCwzMSArMTAyOCwyMyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgCiAgICAgdm9pZCBkdW1wQ2hpbGRyZW4oRklMRSogb3V0KQogICAgIHsKLSAgICAgICAg
aWYgKGNoaWxkMSgpID09IE5vTm9kZSkKKyAgICAgICAgaWYgKCFjaGlsZDEoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZnByaW50ZihvdXQsICJAJXUiLCBjaGlsZDEoKSk7Ci0gICAg
ICAgIGlmIChjaGlsZDIoKSA9PSBOb05vZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiQCV1Iiwg
Y2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICghY2hpbGQyKCkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDIoKSk7Ci0gICAgICAg
IGlmIChjaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBj
aGlsZDIoKS5pbmRleCgpKTsKKyAgICAgICAgaWYgKCFjaGlsZDMoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZnByaW50ZihvdXQsICIsIEAldSIsIGNoaWxkMygpKTsKKyAgICAgICAg
ZnByaW50ZihvdXQsICIsIEAldSIsIGNoaWxkMygpLmluZGV4KCkpOwogICAgIH0KICAgICAKICAg
ICAvLyBUaGlzIGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAg
IE5vZGVUeXBlIG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcg
aW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4K
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAz
IGNoaWxkcmVuICgwIGZvciBubyBjaGlsZCkuCi0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgTm9kZUluZGV4IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDM7Ci0gICAgICAg
IH0gZml4ZWQ7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBmaXJzdENo
aWxkOwotICAgICAgICAgICAgdW5zaWduZWQgbnVtQ2hpbGRyZW47Ci0gICAgICAgIH0gdmFyaWFi
bGU7Ci0gICAgfSBjaGlsZHJlbjsKKyAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRy
ZW4sIG9yIGxpbmtzIHRvIGEgdmFyaWFibGUgbGVuZ3RoIHNldCBvZiBjaGlsZHJlbi4KKyAgICBO
b2RlUmVmZXJlbmNlQmxvYiBjaGlsZHJlbjsKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgdmlydHVh
bCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyAu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVSZWZlcmVuY2VCbG9iLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNl
QmxvYi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
UmVmZXJlbmNlQmxvYi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05vZGVSZWZl
cmVuY2VCbG9iX2gKKyNkZWZpbmUgREZHTm9kZVJlZmVyZW5jZUJsb2JfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorI2luY2x1ZGUgIkRGR05vZGVVc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBOb2RlUmVmZXJlbmNlQmxvYiB7CitwdWJsaWM6CisgICAgZW51
bSBLaW5kIHsKKyAgICAgICAgRml4ZWQsCisgICAgICAgIFZhcmlhYmxlCisgICAgfTsKKworICAg
IE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2luZCkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIDogbV9raW5kKGtpbmQpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChraW5kID09IFZh
cmlhYmxlKSB7CisgICAgICAgICAgICBtX3dvcmRzWzBdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01B
WDsKKyAgICAgICAgICAgIG1fd29yZHNbMV0ubV9lbmNvZGVkV29yZCA9IFVJTlRfTUFYOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVSZWZlcmVuY2VCbG9iKEtpbmQga2luZCwgTm9k
ZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgIDogbV9raW5kKEZpeGVkKQorI2VuZGlmCisgICAgewor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0gRml4ZWQpOworICAgICAgICBpbml0
aWFsaXplKGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgIH0KKyAgICAKKyAgICBOb2RlUmVm
ZXJlbmNlQmxvYihLaW5kIGtpbmQsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNo
aWxkcmVuKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgOiBtX2tpbmQoVmFyaWFibGUp
CisjZW5kaWYKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoa2luZCwga2luZCA9PSBWYXJp
YWJsZSk7CisgICAgICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RDaGlsZCk7CisgICAgICAgIHNldE51
bUNoaWxkcmVuKG51bUNoaWxkcmVuKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgTm9kZVVzZSYg
Y2hpbGQodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgMyk7Cisg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRml4ZWQpOworICAgICAgICByZXR1cm4gbV93b3Jkc1tp
XTsKKyAgICB9ICAgIAorICAgIAorICAgIE5vZGVVc2UmIGNoaWxkKHVuc2lnbmVkIGkpCisgICAg
eworICAgICAgICBBU1NFUlQoaSA8IDMpOworICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVk
KTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbaV07CisgICAgfQorICAgIAorICAgIE5vZGVVc2Ug
Y2hpbGQxKCkgY29uc3QgeyByZXR1cm4gY2hpbGQoMCk7IH0KKyAgICBOb2RlVXNlIGNoaWxkMigp
IGNvbnN0IHsgcmV0dXJuIGNoaWxkKDEpOyB9CisgICAgTm9kZVVzZSBjaGlsZDMoKSBjb25zdCB7
IHJldHVybiBjaGlsZCgyKTsgfQorCisgICAgTm9kZVVzZSYgY2hpbGQxKCkgeyByZXR1cm4gY2hp
bGQoMCk7IH0KKyAgICBOb2RlVXNlJiBjaGlsZDIoKSB7IHJldHVybiBjaGlsZCgxKTsgfQorICAg
IE5vZGVVc2UmIGNoaWxkMygpIHsgcmV0dXJuIGNoaWxkKDIpOyB9CisgICAgCisgICAgTm9kZVVz
ZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRzWzBdOyB9CisgICAgCisg
ICAgdm9pZCBpbml0aWFsaXplKE5vZGVVc2UgY2hpbGQxLCBOb2RlVXNlIGNoaWxkMiwgTm9kZVVz
ZSBjaGlsZDMpCisgICAgeworICAgICAgICBjaGlsZCgwKSA9IGNoaWxkMTsKKyAgICAgICAgY2hp
bGQoMSkgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkKDIpID0gY2hpbGQzOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMiwg
Tm9kZUluZGV4IGNoaWxkMykKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoTm9kZVVzZShjaGls
ZDEpLCBOb2RlVXNlKGNoaWxkMiksIE5vZGVVc2UoY2hpbGQzKSk7CisgICAgfQorCisgICAgdW5z
aWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09
IFZhcmlhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9lbmNvZGVkV29yZDsKKyAg
ICB9CisgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0Q2hpbGQpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93b3Jkc1swXS5t
X2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbnVt
Q2hpbGRyZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBWYXJpYWJs
ZSk7CisgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQ7CisgICAgfQorICAg
IHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93b3Jkc1sxXS5tX2VuY29k
ZWRXb3JkID0gbnVtQ2hpbGRyZW47CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBOb2RlVXNl
IG1fd29yZHNbM107CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEtpbmQgbV9raW5kOworI2Vu
ZGlmCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHTm9kZVVzZV9oCisjZGVmaW5lIERGR05vZGVVc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVSZWZlcmVu
Y2VCbG9iOworCitjbGFzcyBOb2RlVXNlIHsKK3B1YmxpYzoKKyAgICBOb2RlVXNlKCkKKyAgICAg
ICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKE5vTm9kZSwgVW50eXBlZFVzZSkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBOb2RlVXNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisg
ICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgsIFVudHlwZWRVc2UpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZVVzZShOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VL
aW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgs
IHVzZUtpbmQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGluZGV4VW5jaGVj
a2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlmdCgpOyB9CisgICAgTm9k
ZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgbV9lbmNvZGVkV29y
ZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICB9CisgICAgCisgICAgVXNl
S2luZCB1c2VLaW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAmICgoKDEgPDwgc2hpZnQoKSkg
LSAxKSk7CisgICAgICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNlS2luZCk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxVc2VLaW5kPihtYXNrZWQpOworICAgIH0KKyAgICB2b2lkIHNldFVz
ZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwor
ICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgoKSwgdXNlS2luZCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBpbmRleFVuY2hlY2tlZCgp
ICE9IE5vTm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0
KCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oTm9kZVVzZSBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkID09IG90aGVyLm1fZW5jb2RlZFdvcmQ7
CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShOb2RlVXNlIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgIT0gb3RoZXIubV9lbmNvZGVkV29yZDsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5vZGVSZWZlcmVuY2VCbG9iOworICAg
IAorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7IH0KKyAgICAKKyAgICBz
dGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VLaW5kIHVzZUtp
bmQpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCgoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBzaGlmdCgpKSkgPT0gbm9k
ZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVz
ZUtpbmQpOworICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEgPDwgc2hpZnQoKSkpOwor
ICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVzZUtpbmQ7CisgICAgfQor
ICAgIAorICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKK307CisKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oTm9kZVVzZSBub2RlVXNlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIHJldHVy
biBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4OworfQoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVXNlIG5vZGVVc2UpCit7CisgICAg
cmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5kZXg7Cit9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KE5vZGVVc2Ugbm9kZVVzZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK3sK
KyAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5vZGVJbmRleDsKK30KK2lu
bGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZVVzZSBub2RlVXNl
KQoreworICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgIT0gbm9kZUluZGV4Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR05vZGVVc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Nyw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhB
ZGQ6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAgIGlmIChpc05vdE5lZ1pl
cm8obm9kZS5jaGlsZDEoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQyKCkpKQorICAgICAg
ICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90TmVn
WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5O
b2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CkBAIC0xNTYs
NyArMTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIGlmIChpc05vdFplcm8obm9kZS5jaGlsZDEoKSkg
fHwgaXNOb3RaZXJvKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICAgICAgaWYgKGlzTm90WmVybyhu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkp
KQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VB
cml0aE5vZGVGbGFncyhmbGFncyk7CkBAIC0yMTAsMTMgKzIxMCwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsg
Y2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJ
ZHgrKykKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW21fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF1dLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBO
b05vZGUpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgpKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS5jaGls
ZDIoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOwot
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUFyaXRo
Tm9kZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIH0KQEAgLTY3NiwyMSArNjc2LDIxIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMobV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZvdGUoTm9kZUluZGV4IG5vZGVJ
bmRleCwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQorICAgIHZvaWQgdm90ZShO
b2RlVXNlIG5vZGVVc2UsIFZhcmlhYmxlQWNjZXNzRGF0YTo6QmFsbG90IGJhbGxvdCkKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAobV9ncmFwaFtub2RlSW5kZXhdLm9wKSB7CisgICAgICAgIHN3aXRj
aCAobV9ncmFwaFtub2RlVXNlXS5vcCkgewogICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CiAg
ICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAg
ICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBub2RlSW5kZXggPSBtX2dy
YXBoW25vZGVJbmRleF0uY2hpbGQxKCk7CisgICAgICAgICAgICBub2RlVXNlID0gbV9ncmFwaFtu
b2RlVXNlXS5jaGlsZDEoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtX2dy
YXBoW25vZGVJbmRleF0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBtX2dyYXBoW25vZGVJ
bmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoYmFsbG90KTsKKyAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZVVzZV0ub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBtX2dyYXBoW25vZGVV
c2VdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgdm90ZShOb2RlJiBub2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3Qp
CkBAIC03MDEsMTMgKzcwMSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBOb05vZGUpCisg
ICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
dm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSA9
PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwotICAgICAgICBpZiAobm9k
ZS5jaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGlsZDMoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgdm90ZShub2RlLmNoaWxkMygpLCBiYWxsb3QpOwogICAg
IH0KQEAgLTgzNSwxMyArODM1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0gd2hpbGUgKG1fY2hh
bmdlZCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdG9Eb3VibGUoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB2b2lkIHRvRG91YmxlKE5vZGVVc2Ugbm9kZVVzZSkKICAgICB7Ci0gICAgICAgIGlm
IChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikgeworICAgICAgICBpZiAo
bV9ncmFwaFtub2RlVXNlXS5vcCA9PSBWYWx1ZVRvTnVtYmVyKSB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgcHJpbnRmKCIgIEAldSAtPiBW
YWx1ZVRvRG91YmxlIiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHByaW50ZigiICBAJXUgLT4g
VmFsdWVUb0RvdWJsZSIsIG5vZGVVc2UuaW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZUluZGV4XS5vcCA9IFZhbHVlVG9Eb3VibGU7CisgICAgICAgICAgICBtX2dyYXBo
W25vZGVVc2VdLm9wID0gVmFsdWVUb0RvdWJsZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTc3
LDggKzk3Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMygpICE9IE5vTm9kZSAmJiBtX2dyYXBoW25vZGUuY2hpbGQz
KCldLm9wID09IE5vcCkKLSAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxk
MyA9IE5vTm9kZTsKKyAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQzKCkgJiYgbV9ncmFwaFtu
b2RlLmNoaWxkMygpXS5vcCA9PSBOb3ApCisgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5j
aGlsZDMoKSA9IE5vZGVVc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0xMDA1LDEzICsxMDA1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4
XS5vcCA9PSBWYWx1ZVRvTnVtYmVyKQotICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtu
b2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtub2Rl
SW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9ncmFwaFtu
b2RlSW5kZXhdLm9wID09IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IG1f
Z3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3Jh
cGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CisgICAgTm9kZUluZGV4IGNhbm9uaWNhbGl6ZShOb2RlVXNlIG5v
ZGVVc2UpCisgICAgeworICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5vZGVVc2UuaW5kZXhV
bmNoZWNrZWQoKSk7CisgICAgfQogICAgIAogICAgIC8vIENvbXB1dGVzIHdoZXJlIHRoZSBzZWFy
Y2ggZm9yIGEgY2FuZGlkYXRlIGZvciBDU0Ugc2hvdWxkIHN0YXJ0LiBEb24ndCBjYWxsCiAgICAg
Ly8gdGhpcyBkaXJlY3RseTsgY2FsbCBzdGFydEluZGV4KCkgaW5zdGVhZCBhcyBpdCBkb2VzIGxv
Z2dpbmcgaW4gZGVidWcgbW9kZS4KQEAgLTEwNjEsNyArMTA2NSwxMCBAQCBwcml2YXRlOgogICAg
IE5vZGVJbmRleCBzdGFydEluZGV4KCkKICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXhGb3JDaGlsZHJl
bihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigKKyAgICAgICAgICAgIG5vZGUuY2hpbGQxKCku
aW5kZXhVbmNoZWNrZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQyKCkuaW5kZXhVbmNoZWNr
ZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQzKCkuaW5kZXhVbmNoZWNrZWQoKSk7CiAgICAg
fQogICAgIAogICAgIE5vZGVJbmRleCBlbmRJbmRleEZvclB1cmVDU0UoKQpAQCAtMTIwNyw3ICsx
MjE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgUHV0R2xvYmFsVmFyOgogICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09
IHZhck51bWJlciAmJiBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdp
bikgPT0gZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGls
ZDEoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMjM1LDcgKzEyNDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
b05vZGU7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNh
bm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgLy8gV2UgbXVz
dCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRoZSBsb2NhdGlvbiB3ZSdy
ZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0
ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNzaW5nIGFuIGFycmF5IG9m
IGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFuIHRoZSBHZXRCeVZhbCwg
dGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2ggb3RoZXIuCkBAIC0xMzI4
LDcgKzEzMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gY2hpbGQxKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRleCgpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTE0NDIsMjIgKzE0NDksMjIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGVJbmRl
eCYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRp
b24oTm9kZVVzZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIC8v
IENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCi0gICAgICAgIGlmIChj
aGlsZCA9PSBOb05vZGUpCisgICAgICAgIGlmICghY2hpbGQpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQu
Ci0gICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkXTsK
KyAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9yZXBsYWNlbWVudHNbY2hpbGQuaW5k
ZXgoKV07CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgICAgICBjaGlsZCA9IHJlcGxhY2VtZW50OworICAgICAgICBj
aGlsZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBp
cyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBk
b2VzIG5vdAogICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0gICAgICAgIEFTU0VSVCht
X3JlcGxhY2VtZW50c1tjaGlsZF0gPT0gTm9Ob2RlKTsKKyAgICAgICAgQVNTRVJUKG1fcmVwbGFj
ZW1lbnRzW2NoaWxkLmluZGV4KCldID09IE5vTm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
YWRkUmVmKQogICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7CkBAIC0xNTA1LDkgKzE1
MTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiwgc2hvdWxkR2VuZXJhdGUp
OwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMywgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihu
b2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsK
KyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5jaGlsZDMoKSwg
c2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIXNob3Vs
ZEdlbmVyYXRlKQpAQCAtMTYwMiwzNyArMTYwOSwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICBpZiAoYnlWYWxJc1B1cmUobm9k
ZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRp
b24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpOworICAgICAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwg
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5v
ZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQy
KCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChieVZhbElzUHVyZShub2RlKSAmJiBnZXRC
eVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkgIT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIG5vZGUub3AgPSBQdXRCeVZhbEFs
aWFzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlv
bihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgIGlmIChj
aGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNo
aWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgICAgICAgICAgaWYg
KGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9uKCksIG5vZGUuY2hpbGQxKCkp
KQorICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9u
KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0
aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbik7Ci0gICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUu
Y2hpbGQxKCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZUhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0
b3JhZ2U6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2Fk
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKLSAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRp
Zmllck51bWJlciwgbm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxk
MSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQu
aAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY29y
ZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCi0jaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CkBAIC0xMDYsNiArMTA2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZnJlZS5hcHBlbmQo
aW5kZXgpOwogICAgICAgICB9CiAgICAgfQorICAgIHZvaWQgdXNlKE5vZGVVc2UgY2hpbGQpCisg
ICAgeworICAgICAgICB1c2UoY2hpbGQuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgfQogCiAgICAg
dW5zaWduZWQgaGlnaFdhdGVybWFyaygpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
MDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDcgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoaXNLbm93bk51bWVy
aWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSkgewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIG9wMS5maWxsKCk7CiAgICAgICAgIGlmIChvcDEuaXNEb3VibGUoKSkg
ewpAQCAtMzgxLDggKzM4MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
VmFsdWUKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIG9wMSk7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AxLCBmYWxzZSk7CiAKLSAgICBBU1NFUlQoIWlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0gICAgQVNTRVJUKCFpc051bWJlckNvbnN0
YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSgpLmluZGV4KCkpKTsKKyAgICBBU1NFUlQoIWlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGls
ZDEoKS5pbmRleCgpKSk7CiAKICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOwogICAg
IEdQUlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKQEAgLTQxNSw5ICs0MTUsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUmIG5vZGUpCiB7Ci0gICAg
QVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAgIEFTU0VSVCghaXNJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogCi0gICAgaWYgKGlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAg
ICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtNTMyLDE0ICs1MzIs
MTQgQEAgSklUQ29tcGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZAogICAgIHJldHVy
biBmdW5jdGlvbkNhbGw7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQo
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1
ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIEdQ
UlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtp
bmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9h
ZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBOb2RlVXNl
IHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKICAg
ICBtX2ppdC5iZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOwogICAgIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0
cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIG1faml0LmVuZFVuaW50ZXJy
dXB0ZWRTZXF1ZW5jZSgpOwogCi0gICAgd3JpdGVCYXJyaWVyKGJhc2VQYXlsb2FkR1BSLCB2YWx1
ZVRhZ0dQUiwgdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0
Y2hHUFIpOworICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZh
bHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAKICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwogICAgIEpJVENv
bXBpbGVyOjpEYXRhTGFiZWwzMiB0YWdTdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlMzJXaXRo
QWRkcmVzc09mZnNldFBhdGNoKHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKQEAgLTU3Niw3ICs1NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKENvZGVPCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNv
cmQoY29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVy
ZUNoZWNrLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCh0YWdTdG9yZVdpdGhQYXRjaC5s
YWJlbCgpKSwgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QocGF5bG9hZFN0b3JlV2l0aFBh
dGNoLmxhYmVsKCkpLCBzbG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VQ
YXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZVRhZ0dQUiksIHNhZmVDYXN0PGludDhf
dD4odmFsdWVQYXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51
bGwoTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKE5vZGVVc2Ugb3BlcmFuZCwgYm9v
bCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOwogICAg
IEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CkBAIC01ODYsMTMgKzU4NiwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q2VsbDsKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKQorICAgIGlmICghaXNL
bm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkKICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdFBh
eWxvYWRHUFIpOwogICAgIG1faml0LnRlc3Q4KGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDog
SklUQ29tcGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRH
UFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAg
Ci0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgeworICAgIGlmICghaXNLbm93bkNlbGwo
b3BlcmFuZC5pbmRleCgpKSkgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC02
MDgsNyArNjA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQog
ICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChO
b2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChO
b2RlVXNlIG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQog
ewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwogICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwpAQCAtNjMwLDEzICs2
MzAsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7CiAgICAgCi0gICAgaWYgKCFpc0tub3duQ2Vs
bChvcGVyYW5kKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCiAgICAg
ICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFy
Z1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICAKICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hU
ZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRha2VuKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAg
aWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKSB7CiAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAgICAgCiAgICAgICAgIG5vdENlbGwubGluaygm
bV9qaXQpOwpAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlUGVlcGgKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwog
fQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUm
IG5vZGUsIE5vZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCkKK2Jvb2wgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYgbm9kZSwgTm9kZVVzZSBvcGVyYW5k
LCBib29sIGludmVydCkKIHsKICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0
UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoTm9kZUluZGV4ICE9IE5vTm9kZSkgewpA
QCAtNjk4LDcgKzY5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAg
aWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkg
ewogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogCkBAIC03MTYsMTQgKzcxNiwxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGFyZzEudXNlKCk7CiAgICAgICAg
IGFyZzIudXNlKCk7CiAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQog
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZykpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigp
KSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQog
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZykpKTsKICAgICAKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNv
bmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiksIHRha2VuKTsKICAgICAKLSAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAhaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MSgpLmluZGV4KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7
CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgCiAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC03NTEsNyArNzUxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIAogICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKLSAgICBpZiAoaXNLbm93bk5vdEludGVnZXIo
bm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAg
ICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3du
Tm90SW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0Lmdw
cigpOwogICAgIApAQCAtNzY5LDE0ICs3NjksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZQogICAgICAgICBhcmcxLnVzZSgpOwogICAgICAgICBhcmcyLnVzZSgp
OwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBhcmcxVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQorICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBhcmcyVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxUGF5bG9hZEdQUiwg
YXJnMlBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIAotICAgICAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MigpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC04MjIsNyArODIyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGFyZzEudXNlKCk7CiAg
ICAgYXJnMi51c2UoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKSkg
JiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAoaXNLbm93bkNlbGwobm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkp
KSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJl
IGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVu
IHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQ
UiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwpAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBhcmcxLnVzZSgpOwogICAg
IGFyZzIudXNlKCk7CiAgICAgCi0gICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkpICYm
IGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgaWYgKGlzS25vd25DZWxsKG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkg
ewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBj
ZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAgICAgICAgLy8gY2VsbCwgdGhlbiB0
aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFQ
YXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUik7CkBAIC05MDgsMTEgKzkwOCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAKICAgICBDYWxsTGlua0luZm86OkNh
bGxUeXBlIGNhbGxUeXBlID0gbm9kZS5vcCA9PSBDYWxsID8gQ2FsbExpbmtJbmZvOjpDYWxsIDog
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CiAKLSAgICBOb2RlSW5kZXggY2FsbGVlTm9kZUluZGV4
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKLSAg
ICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlTm9kZUluZGV4KTsKKyAgICBOb2Rl
VXNlIGNhbGxlZU5vZGVVc2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCldOworICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2Rl
VXNlKTsKICAgICBHUFJSZWcgY2FsbGVlVGFnR1BSID0gY2FsbGVlLnRhZ0dQUigpOwogICAgIEdQ
UlJlZyBjYWxsZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxvYWRHUFIoKTsKLSAgICB1c2UoY2Fs
bGVlTm9kZUluZGV4KTsKKyAgICB1c2UoY2FsbGVlTm9kZVVzZSk7CiAKICAgICAvLyBUaGUgY2Fs
bCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1h
bCBjYWxsKSBvciB0aGUKICAgICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwpLiBzdWJzZXF1ZW50
IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgpAQCAtOTI0LDExICs5MjQsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIG1faml0LnN0b3JlMzIoY2Fs
bGVlVGFnR1BSLCBjYWxsRnJhbWVUYWdTbG90KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICBOb2Rl
SW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUu
Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywg
YXJnTm9kZUluZGV4KTsKKyAgICAgICAgTm9kZVVzZSBhcmdOb2RlVXNlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZVVzZSk7CiAgICAgICAgIEdQUlJlZyBhcmdU
YWdHUFIgPSBhcmcudGFnR1BSKCk7CiAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJn
LnBheWxvYWRHUFIoKTsKLSAgICAgICAgdXNlKGFyZ05vZGVJbmRleCk7CisgICAgICAgIHVzZShh
cmdOb2RlVXNlKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgYXJndW1lbnRU
YWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKGFy
Z1BheWxvYWRHUFIsIGFyZ3VtZW50UGF5bG9hZFNsb3QoaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7
CkBAIC0xNDM5LDcgKzE0MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVB
ZGQoTm9kCiAgICAgCiAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7CiAgICAgR1BSUmVz
dWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZS5j
aGlsZDEoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2RlLmNoaWxkMigpKSkKKyAgICBpZiAoaXNL
bm93bk5vdE51bWJlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Ob3ROdW1iZXIo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25W
YWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBv
cDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUik7CiAgICAg
ZWxzZQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiwgb3Ay
VGFnR1BSLCBvcDJQYXlsb2FkR1BSKTsKQEAgLTE0NDcsOSArMTQ0Nyw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4
IG5vZGVJbmRleCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0
aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoTm9kZVVzZSBub2RlVXNlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgYm9vbCBu
ZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlSW5kZXgpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiA9IHZhbHVlLnRhZ0dQUigpOwogICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5w
YXlsb2FkR1BSKCk7CkBAIC0xNDU3LDcgKzE0NTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2Vs
bCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5
bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlmIChuZWVkU3BlY3VsYXRp
b25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRH
UFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
VGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Ok51bGxUYWcpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CiAgICAgfQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKQEAgLTE0NzgsNyArMTQ3OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoaXNLbm93bkJv
b2xlYW4obm9kZS5jaGlsZDEoKSkgfHwgaXNCb29sZWFuUHJlZGljdGlvbihtX2ppdC5nZXRQcmVk
aWN0aW9uKG5vZGUuY2hpbGQxKCkpKSkgeworICAgIGlmIChpc0tub3duQm9vbGVhbihub2RlLmNo
aWxkMSgpLmluZGV4KCkpIHx8IGlzQm9vbGVhblByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlv
bihub2RlLmNoaWxkMSgpLmluZGV4KCkpKSkgewogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwg
dmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC0xNTM1LDkgKzE1MzUsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgYm9vbGVhblJlc3VsdChyZXN1
bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9k
ZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlVXNlIG5vZGVV
c2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewotICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZVVzZSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BS
UmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgR1BSUmVnIHZhbHVlUGF5bG9h
ZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIp
LCBub2RlVXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CiAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygm
bV9qaXQpOwpAQCAtMTU1NCw3ICsxNTU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcgogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5v
ZGVVc2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CiAgICAgfQogCiAgICAgaWYgKG5v
dFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBAIC0xNTY4LDcgKzE1NjgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CiAKLSAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEo
KSkpIHsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewog
ICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKIApAQCAtMTgwMCwxOCArMTgwMCwxOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAg
Y2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBi
aXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSwgb3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTE4MzAsMTEgKzE4MzAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2Ug
Qml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkg
eworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsK
ICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAotICAg
ICAgICAgICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMigpKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzaGlmdE9wKG9w
LCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkg
JiAweDFmLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjA5MSwxMiAr
MjA5MSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGlmIChpc051bGxDb25z
dGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS5j
aGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFy
ZU51bGwobm9kZSwgbm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLmNoaWxkMigp
LmluZGV4KCkpKSB7CiAgICAgICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChu
b2RlLCBub2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI2MzEsNyArMjYzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgaWYgKGlz
U3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigp
KSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CkBAIC0yNzIwLDcgKzI3MjAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTog
QWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgogICAgICAgICAKLSAgICAgICAgYm9vbCB3YXNQ
cmltaXRpdmUgPSBpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duQm9vbGVh
bihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYm9vbCB3YXNQcmltaXRpdmUgPSBpc0tub3duTnVt
ZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgb3Ax
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYwLDcgKzM2MCw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25O
dW1lcmljKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpA
QCAtMzcxLDggKzM3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWUKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKLSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSk7Ci0gICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hp
bGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4
KCkpKTsKKyAgICBBU1NFUlQoIWlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgp
KSk7CiAgICAgCiAgICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBvcDEuZ3ByKCk7CiAgICAgR1BSUmVn
IGdwciA9IHJlc3VsdC5ncHIoKTsKQEAgLTQwNCw5ICs0MDQsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkpOwogICAgIAotICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkgeworICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkp
KSB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3Zl
KG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTUxMiwxMyArNTEyLDEzIEBAIEpJVENvbXBp
bGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAgICByZXR1cm4gZnVuY3Rpb25DYWxs
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVl
SW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRL
aW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBi
YXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogewogICAgIAogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVj
dHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CiAKLSAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFs
dWVHUFIsIHZhbHVlSW5kZXgsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
R1BSKTsKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAKICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3Bl
cnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMy
IHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZh
bHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CkBAIC01NTQsNyAr
NTU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIG1f
aml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKGNvZGVPcmlnaW4sIHN0
cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbENvbXBhY3Qoc3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksIHNsb3dDYXNlLCBk
b25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZUdQUiksIHNhZmVDYXN0PGludDhfdD4odmFs
dWVHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChOb2RlSW5kZXgg
b3BlcmFuZCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZVVzZSBvcGVyYW5kLCBib29sIGludmVydCkKIHsK
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7CiAgICAgR1BSUmVnIGFyZ0dQ
UiA9IGFyZy5ncHIoKTsKQEAgLTU2NCwxMyArNTY0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxs
OwogICAgIAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCisgICAgaWYgKCFpc0tub3du
Q2VsbChvcGVyYW5kLmluZGV4KCkpKQogICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJn
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC50
ZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKSB7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICBub3RDZWxs
LmxpbmsoJm1faml0KTsKQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJ
bmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZVVzZSBvcGVyYW5kLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBOb2RlJiBicmFuY2hOb2Rl
ID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKICAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9k
ZS50YWtlbkJsb2NrSW5kZXgoKTsKQEAgLTYwNywxMyArNjA3LDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RDZWxsOwogICAgIAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCisgICAgaWYgKCFp
c0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKQogICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYXJnR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBK
SVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1
Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YWtlbik7CiAgICAgCi0gICAgaWYgKCFpc0tub3du
Q2VsbChvcGVyYW5kKSkgeworICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkg
ewogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgICAgIAog
ICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5qdW1wKCksIG5vdFRha2VuKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVDb21wYXJlTnVsbChOb2RlJiBub2RlLCBOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZl
cnQpCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUm
IG5vZGUsIE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZUluZGV4IGJy
YW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaE5v
ZGVJbmRleCAhPSBOb05vZGUpIHsKQEAgLTY3Miw3ICs2NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgp
KSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgIGlmIChpc0tub3du
Tm90SW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKQEAgLTY5MCwx
NCArNjkwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAg
ICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CiAgICAgCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBhcmcx
R1BSLCBhcmcyR1BSKSwgdGFrZW4pOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIGFkZEJyYW5j
aChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAKICAgICAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKQEAgLTcyMyw3ICs3MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRo
OwogICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tu
b3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgIGlmIChpc0tub3duTm90SW50ZWdl
cihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKQEAgLTc0MiwxNCArNzQyLDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgYXJn
MS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQy
KCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkp
CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1
bHRHUFIpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkp
IHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVS
ZXN1bHQgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CkBAIC03OTUsNyArNzk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVQZWVwaAogICAgIGFyZzEudXNlKCk7CiAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICBp
ZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIo
KSkpIHsKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tu
b3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBn
ZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0
aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVh
bC4KICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWws
IGFyZzFHUFIsIGFyZzJHUFIpLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsKQEAgLTg0NCw3
ICs4NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAg
YXJnMS51c2UoKTsKICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgIGlmIChpc0tub3duQ2VsbChu
b2RlLmNoaWxkMSgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpKSkgeworICAgIGlmIChp
c0tub3duQ2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhl
IGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCiAgICAgICAg
IC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKQEAgLTkxNywxMCArOTE3LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICAKICAgICBDYWxsTGlua0lu
Zm86OkNhbGxUeXBlIGNhbGxUeXBlID0gbm9kZS5vcCA9PSBDYWxsID8gQ2FsbExpbmtJbmZvOjpD
YWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CiAgICAgCi0gICAgTm9kZUluZGV4IGNhbGxl
ZU5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hp
bGQoKV07Ci0gICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJbmRleCk7
CisgICAgTm9kZVVzZSBjYWxsZWVOb2RlVXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxk
cmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywg
Y2FsbGVlTm9kZVVzZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKLSAg
ICB1c2UoY2FsbGVlTm9kZUluZGV4KTsKKyAgICB1c2UoY2FsbGVlTm9kZVVzZSk7CiAgICAgCiAg
ICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1
bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCiAgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxs
KS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KQEAgLTkzMSwxMCArOTMx
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBtX2pp
dC5zdG9yZVB0cihjYWxsZWVHUFIsIGNhbGxGcmFtZVNsb3QoUmVnaXN0ZXJGaWxlOjpDYWxsZWUp
KTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewot
ICAgICAgICBOb2RlSW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0No
aWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsKKyAgICAgICAgTm9kZVVzZSBhcmdOb2RlVXNlID0g
bV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGld
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZVVzZSk7CiAgICAgICAg
IEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgIHVzZShhcmdOb2RlSW5kZXgpOwor
ICAgICAgICB1c2UoYXJnTm9kZVVzZSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0
cihhcmdHUFIsIGFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CkBA
IC0xNDU5LDkgKzE0NTksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1
YWxpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBpZiAo
IXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CiAgICAgaWYgKCFwcmVk
aWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS5j
aGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKFZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CkBAIC0xNTExLDcgKzE1MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAKICAgICBH
UFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGlmIChpc0tub3duTm90TnVtYmVyKG5vZGUuY2hp
bGQxKCkpIHx8IGlzS25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDIoKSkpCisgICAgaWYgKGlzS25v
d25Ob3ROdW1iZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duTm90TnVtYmVyKG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFs
dWVBZGROb3ROdW1iZXIsIHJlc3VsdC5ncHIoKSwgb3AxR1BSLCBvcDJHUFIpOwogICAgIGVsc2UK
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0LmdwcigpLCBv
cDFHUFIsIG9wMkdQUik7CkBAIC0xNTE5LDE2ICsxNTE5LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZVVzZSBub2RlVXNlLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbywgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKLSAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOworICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTUzNyw3
ICsxNTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAg
IGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkp
OworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BS
KSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVz
dWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihWYWx1ZU51bGwpKSkpOwogICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICAKQEAgLTE1
NDgsNyArMTU0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYgbm9kZSkKIHsK
LSAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93
bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICBTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIApAQCAtMTYyMywxNiArMTYyMywxNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2Vu
LCBCbG9ja0luZGV4IG5vdFRha2VuLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgYm9vbCBu
ZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90
aGVyQnJhbmNoKE5vZGVVc2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBu
b3RUYWtlbiwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0aW9u
Q2hlY2spCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKKyAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0lu
Zm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkp
OwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxs
LmxpbmsoJm1faml0KTsKQEAgLTE2NDAsNyArMTY0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAg
ICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0LmFu
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsK
ICAgICB9CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgIGFkZEJy
YW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKQEAgLTE2NTYsNyArMTY1Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICBCbG9ja0luZGV4IHRha2Vu
ID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9k
ZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5pbmRl
eCgpKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlv
biA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAKICAgICAgICAgaWYgKHRha2Vu
ID09IChtX2Jsb2NrICsgMSkpIHsKQEAgLTE4NzksMTggKzE4NzksMTggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2Ug
Qml0T3I6CiAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgp
LmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Ao
b3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIG9wMi5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDIoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkp
LCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTA5
LDExICsxOTA5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVS
U2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAg
ICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc2hpZnRPcChvcCwgb3Ax
LmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpICYgMHgx
ZiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTIxNDcsMTIgKzIxNDcs
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBi
cmVhazsKIAogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVsbENvbnN0YW50KG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIGlmIChub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxs
KG5vZGUsIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc051bGxDb25zdGFudChub2RlLmNo
aWxkMigpKSkgeworICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRl
eCgpKSkgewogICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwg
bm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0yNjYxLDcgKzI2NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIGlmIChpc1N0cmlj
dEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewog
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRh
a2VuQmxvY2tJbmRleCgpOwpAQCAtMjczOCw3ICsyNzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEFkZCBz
dHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KICAgICAgICAgCi0gICAgICAgIGJvb2wgd2FzUHJpbWl0
aXZlID0gaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bkJvb2xlYW4obm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgIGJvb2wgd2FzUHJpbWl0aXZlID0gaXNLbm93bk51bWVyaWMo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIyICs4NywyMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlJiBuCiAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSAr
IG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgIHVzZShtX2ppdC5n
cmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKLSAgICAgICAgaWYgKGNoaWxkMSA9
PSBOb05vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAm
JiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgIE5vZGVVc2UgY2hpbGQxID0gbm9k
ZS5jaGlsZDEoKTsKKyAgICAgICAgaWYgKCFjaGlsZDEpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bm9kZS5jaGlsZDIoKSAmJiAhbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgdXNlKGNoaWxkMSk7CiAgICAgICAgIAotICAgICAgICBOb2RlSW5k
ZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKLSAgICAgICAgaWYgKGNoaWxkMiA9PSBOb05vZGUp
IHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAg
IE5vZGVVc2UgY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAgICAgICAgaWYgKCFjaGlsZDIpIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgdXNlKGNoaWxkMik7CiAgICAgICAgIAotICAgICAgICBOb2Rl
SW5kZXggY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsKLSAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05v
ZGUpCisgICAgICAgIE5vZGVVc2UgY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsKKyAgICAgICAgaWYg
KCFjaGlsZDMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHVzZShjaGlsZDMpOwogICAg
IH0KQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjptYXJrQ2VsbENhcmQo
TWFjcm9BCiAjZW5kaWYKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQ
UlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3Jp
dGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VL
aW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsKICAgICBVTlVTRURfUEFS
QU0ob3duZXJHUFIpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7CkBAIC0yNTcsNyArMjU3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZwogICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoMik7CiAgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwogCi0gICAgaWYg
KGlzS25vd25Ob3RDZWxsKHZhbHVlSW5kZXgpKQorICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1
ZVVzZS5pbmRleCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihHUFJSZWcKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxs
OwogICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGljdGlvbihtX2ppdC5nZXRQcmVkaWN0aW9uKHZhbHVl
SW5kZXgpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2UuaW5kZXgoKSkgJiYgIWlz
Q2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZVVzZS5pbmRleCgpKSkpIHsK
ICAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKICAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0
LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CiAgICAgfQpAQCAtMzI1LDE0ICszMjUsMTQgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZwogI2VuZGlmCiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFs
dWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQs
IEdQUlJlZyBzY3JhdGNoKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVy
VXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaCkKIHsKICAgICBVTlVTRURfUEFSQU0ob3du
ZXIpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7CiAgICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gpOwogICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKIAotICAgIGlmIChpc0tub3duTm90Q2Vs
bCh2YWx1ZUluZGV4KSkKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2UuaW5kZXgoKSkp
CiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
QEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlND
ZWxsCiAjaWYgRU5BQkxFKEdHQykKICAgICBKSVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwog
ICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1
ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGljdGlvbihtX2ppdC5nZXRQcmVkaWN0aW9uKHZhbHVlSW5k
ZXgpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2UuaW5kZXgoKSkgJiYgIWlzQ2Vs
bFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZVVzZS5pbmRleCgpKSkpIHsKICAg
ICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKICAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0LmJy
YW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CiAgICAgfQpAQCAtMzgzLDcgKzM4Myw3IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIAogYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlJiBub2RlLCBib29sIGludmVydCkKIHsKLSAg
ICBpZiAoIWludmVydCAmJiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93
bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpKQorICAgIGlmICghaW52ZXJ0ICYmIChpc0tub3duTnVt
ZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkpKQogICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKTsKICAgICAK
ICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsK
QEAgLTgzMSw5ICs4MzEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAoIXByZWRp
Y3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChv
cDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2Vs
bDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFz
c0luZm8pKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIAogICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBp
ZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKQEAgLTg1NSwxMyArODU1LDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAgICAgbm90VGFrZW4gPSB0
bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewot
ICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkp
OworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgeworICAg
ICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmRpdGlvbiwgSklU
Q29tcGlsZXI6OkltbTMyKGltbSksIG9wMi5ncHIoKSksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYg
KGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgIH0gZWxzZSBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBpbnQzMl90IGlt
bSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpOworICAgICAgICBpbnQzMl90
IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29t
cGlsZXI6OkltbTMyKGltbSkpLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpAQCAtOTEzLDcgKzkx
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUKIHsKICAgICBB
U1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7CiAgICAgCi0gICAgc2V0Tm9kZUluZGV4Rm9yT3Bl
cmFuZChub2RlLmNoaWxkMSgpLCBub2RlLmxvY2FsKCkpOworICAgIHNldE5vZGVJbmRleEZvck9w
ZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFzdFNl
dE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CiB9CiAKQEAgLTEyODksNyArMTI4OSw3IEBAIFZhbHVl
UmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUlu
dDMyVG9OdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9k
ZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5v
ZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZhdChu
b2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tu
b2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgICAgICAgICAgICAgaWYgKGluZm9QdHIt
PmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQpAQCAtMTU5NCwx
NiArMTU5NCwxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShHUFJSZWcg
YmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlKQogewotICAgIE5vZGVJbmRleCBiYXNl
SW5kZXggPSBub2RlLmNoaWxkMSgpOwotICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5j
aGlsZDMoKTsKKyAgICBOb2RlVXNlIGJhc2VVc2UgPSBub2RlLmNoaWxkMSgpOworICAgIE5vZGVV
c2UgdmFsdWVVc2UgPSBub2RlLmNoaWxkMygpOwogICAgIAotICAgIGlmICghaXNCeXRlQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlSW5kZXgpLm1fdHlwZSkpCi0gICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSks
IGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0J5dGVBcnJheTo6c19pbmZvKSkpOworICAg
IGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKS5tX3R5
cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2UpLCBiYXNlVXNlLmluZGV4KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNCeXRl
QXJyYXk6OnNfaW5mbykpKTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZh
bHVlR1BSOwogCi0gICAgaWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3RhbnQoKSkgewotICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZUluZGV4KTsKKyAgICBp
ZiAoYXQodmFsdWVVc2UpLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVVzZS5pbmRleCgpKTsKICAgICAgICAgaWYgKCFqc1Zh
bHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwpAQCAtMTYxNSw4ICsxNjE1LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQgogICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKGNs
YW1wZWRWYWx1ZSksIHNjcmF0Y2hSZWcpOwogICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsK
ICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxzZSBpZiAoIWF0KHZhbHVl
SW5kZXgpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlSW5kZXgpOworICAgIH0gZWxzZSBpZiAo
IWF0KHZhbHVlVXNlKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNj
cmF0Y2guZ3ByKCk7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJl
Zyk7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JCCiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAgICB2YWx1ZUdQ
UiA9IHNjcmF0Y2hSZWc7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlSW5kZXgpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwogICAg
ICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKQEAgLTE3NDUsMTYgKzE3NDUsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2Rl
JiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVt
ZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVk
bmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQogewotICAgIE5vZGVJbmRleCBiYXNl
SW5kZXggPSBub2RlLmNoaWxkMSgpOwotICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5j
aGlsZDMoKTsKKyAgICBOb2RlVXNlIGJhc2VVc2UgPSBub2RlLmNoaWxkMSgpOworICAgIE5vZGVV
c2UgdmFsdWVVc2UgPSBub2RlLmNoaWxkMygpOwogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJl
cXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNl
SW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2UpLCBiYXNlVXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsK
ICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogICAgIAotICAg
IGlmIChhdCh2YWx1ZUluZGV4KS5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSBqc1Zh
bHVlID0gdmFsdWVPZkpTQ29uc3RhbnQodmFsdWVJbmRleCk7CisgICAgaWYgKGF0KHZhbHVlVXNl
KS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQodmFsdWVVc2UuaW5kZXgoKSk7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigp
KSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKQEAgLTE3NzAsOCArMTc3MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJbW0zMihzdGF0aWNfY2FzdDxpbnQ+
KGQpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwogICAgICAg
ICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmICghYXQodmFsdWVJbmRleCku
c2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVJbmRleCk7CisgICAgfSBlbHNlIGlmICghYXQodmFs
dWVVc2UpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5n
cHIoKTsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKQEAg
LTE3ODMsNyArMTc4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckkKICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwogICAgIH0gZWxzZSBpZiAocm91bmRp
bmcgPT0gQ2xhbXBSb3VuZGluZykgewogICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7
Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4
KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNl
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgRlBSVGVtcG9y
YXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnBy
KCk7CkBAIC0xNzkyLDcgKzE3OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JJCiAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CiAgICAgICAgIHZhbHVlR1BS
ID0gZ3ByOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFs
dWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2
YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CiAgICAgICAgIEdQUlJlZyBn
cHIgPSByZXN1bHQuZ3ByKCk7CkBAIC0xODkxLDEzICsxODkxLDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXpl
X3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxh
dGlvblJlcXVpcmVtZW50cykKIHsKLSAgICBOb2RlSW5kZXggYmFzZUluZGV4ID0gbm9kZS5jaGls
ZDEoKTsKLSAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hpbGQzKCk7CisgICAgTm9k
ZVVzZSBiYXNlVXNlID0gbm9kZS5jaGlsZDEoKTsKKyAgICBOb2RlVXNlIHZhbHVlVXNlID0gbm9k
ZS5jaGlsZDMoKTsKICAgICAKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhp
cywgdmFsdWVJbmRleCk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMs
IHZhbHVlVXNlKTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZVVzZS5pbmRl
eCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKICAgICAKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIApAQCAtMjA0Miw4ICsyMDQyLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIG9w
MUdwciA9IG9wMS5ncHIoKTsKIAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIo
KSkpIHsKLSAgICAgICAgaW50MzJfdCBkaXZpc29yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKSk7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4
KCkpKSB7CisgICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgIGlmIChkaXZpc29yIDwgMCkKICAgICAgICAg
ICAgIGRpdmlzb3IgPSAtZGl2aXNvcjsKIApAQCAtMjE5OSw4ICsyMTk5LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFkZChOb2RlJiBub2RlKQogewogICAgIGlmIChtX2ppdC5ncmFwaCgpLmFkZFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSwgbV9qaXQuY29kZUJsb2NrKCkpKSB7Ci0gICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGlt
bTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAgICAg
ICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogCkBAIC0yMjE0LDkgKzIyMTQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QWRkKE5vZGUmIG5vCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAg
ICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQz
Mihub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZOdW1i
ZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CkBAIC0y
Mjc5LDkgKzIyNzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUmIG5v
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kZSYgbm9kZSkKIHsKICAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUsIG1faml0
LmNvZGVCbG9jaygpKSkgewotICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxk
MigpKSkgeworICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4
KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mTnVtYmVyQ29u
c3RhbnRBc0ludDMyKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0g
dmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMigpLmluZGV4KCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKG5v
ZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewpAQCAtMjI5NCw4
ICsyMjk0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlz
TnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1t
MSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGlsZDEoKSk7CisgICAgICAg
IGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKKyAgICAgICAg
ICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGls
ZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgICAgICAgICAgICAgCkBAIC0yNDIxLDcgKzI0MjEsNyBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChOb2RlJiBub2RlLCBO
b2RlSW5kZXggdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpCitib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3RyaWN0RXFGb3JDb25zdGFudChOb2RlJiBub2RlLCBOb2RlVXNlIHZhbHVlLCBKU1Zh
bHVlIGNvbnN0YW50KQogewogICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCB2YWx1ZSk7CiAg
ICAgCkBAIC0yNDk4LDE0ICsyNDk4LDE0IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpY3RFcShOb2QKICAgICAvLyAxKSBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIGNvbnN0YW50IGFu
ZCB0aGF0IGNvbnN0YW50IGlzIG5vdCBhIGRvdWJsZSwgaW50ZWdlciwKICAgICAvLyAgICBvciBz
dHJpbmcsIHRoZW4gZG8gYSBKU1ZhbHVlIGNvbXBhcmlzb24uCiAgICAgCi0gICAgaWYgKGlzSlND
b25zdGFudChub2RlLmNoaWxkMSgpKSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CisgICAgaWYgKGlzSlNDb25zdGFudChub2RlLmNo
aWxkMSgpLmluZGV4KCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25z
dGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmlj
dEVxRm9yQ29uc3RhbnQobm9kZSwgbm9kZS5jaGlsZDIoKSwgdmFsdWUpOwogICAgIH0KICAgICAK
LSAgICBpZiAoaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMigpKTsKKyAgICBpZiAoaXNKU0Nv
bnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgIGlmICgh
dmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVy
biBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChub2RlLCBub2RlLmNoaWxkMSgpLCB2YWx1ZSk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDEwIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CiAg
ICAgfQorICAgIE5vZGUmIGF0KE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhdChub2RlVXNlLmluZGV4KCkpOworICAgIH0KICAgICAKICAgICBHUFJSZWcgZmlsbEludGVn
ZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogICAgIEZQUlJlZyBmaWxs
RG91YmxlKE5vZGVJbmRleCk7CkBAIC0yMTgsNiArMjIyLDEwIEBAIHB1YmxpYzoKICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
CiAgICAgICAgIHJldHVybiBpbmZvLmNhblJldXNlKCk7CiAgICAgfQorICAgIGJvb2wgY2FuUmV1
c2UoTm9kZVVzZSBub2RlVXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhblJldXNlKG5vZGVV
c2UuaW5kZXgoKSk7CisgICAgfQogICAgIEdQUlJlZyByZXVzZShHUFJSZWcgcmVnKQogICAgIHsK
ICAgICAgICAgbV9ncHJzLmxvY2socmVnKTsKQEAgLTMxOCwxMyArMzI2LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8uZ3ByKCkpOwogI2VuZGlmCiAgICAgfQor
ICAgIHZvaWQgdXNlKE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIHVzZShub2RlVXNl
LmluZGV4KCkpOworICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIG1hcmtDZWxsQ2FyZChNYWNyb0Fz
c2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2Ny
YXRjaEdQUjIpOwogICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYs
IEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIs
IFdyaXRlQmFycmllclVzZUtpbmQpOwogCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJp
ZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2Ny
YXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcg
b3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVy
VXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVn
KTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIs
IE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtp
bmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOwogCiAgICAgc3RhdGljIEdQ
UlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFs
aWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVnKQogICAgIHsKQEAgLTg3
NSw3ICs4ODcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0Tm9k
ZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUmIGxhc3ROb2RlID0gYXQo
bGFzdE5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYg
bGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9O
b2RlOworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNo
aWxkMSgpLmluZGV4KCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2Rl
OwogICAgIH0KICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2Rl
Jik7CkBAIC04ODUsMTUgKzg5NywxNSBAQCBwcml2YXRlOgogICAgIGVudW0gU3BpbGxSZWdpc3Rl
cnNNb2RlIHsgTmVlZFRvU3BpbGwsIERvbnRTcGlsbCB9OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwotICAgIHZvaWQg
Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBOb2Rl
SW5kZXggdmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29t
cGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlLCBHUFJSZWcgdmFsdWUsIE5vZGVVc2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BS
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1
bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7
Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBOb2RlSW5kZXgg
dmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6
Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNl
UGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBO
b2RlVXNlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21w
aWxlcjo6SnVtcCgpKTsKICNlbmRpZgogCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZU51bGwoTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwot
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJh
bmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAg
IGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiwgTm9kZUluZGV4IG9wZXJhbmQs
IGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZUNvbXBhcmVOdWxsKE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAg
dm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChOb2RlVXNlIG9wZXJhbmQsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIGJvb2wg
bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiwgTm9kZVVzZSBvcGVyYW5kLCBib29sIGlu
dmVydCA9IGZhbHNlKTsKICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFu
Y2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOwogICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rp
b24pOwpAQCAtMTUwNSwxNSArMTUxNywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZVBl
ZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGNv
bnN0IENsYXNzSW5mbyosIFByZWRpY3Rpb25DaGVja2VyKTsKICAgICB2b2lkIGNvbXBpbGVPYmpl
Y3RFcXVhbGl0eShOb2RlJiwgY29uc3QgQ2xhc3NJbmZvKiwgUHJlZGljdGlvbkNoZWNrZXIpOwog
ICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggdmFsdWUsIGNvbnN0IENsYXNzSW5mbyosIGJvb2wg
bmVlZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dp
Y2FsTm90KE5vZGVVc2UgdmFsdWUsIGNvbnN0IENsYXNzSW5mbyosIGJvb2wgbmVlZFNwZWN1bGF0
aW9uQ2hlY2spOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYpOwotICAgIHZvaWQg
ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRha2Vu
LCBCbG9ja0luZGV4IG5vdFRha2VuLCBjb25zdCBDbGFzc0luZm8qLCBib29sIG5lZWRTcGVjdWxh
dGlvbkNoZWNrKTsKKyAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVVc2UgdmFs
dWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIGNvbnN0IENsYXNzSW5m
byosIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgZW1pdEJyYW5jaChOb2Rl
Jik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUoTm9kZSYsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVEb3VibGVDb21w
YXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKICAgICAKLSAgICBi
b29sIGNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KE5vZGUmLCBOb2RlSW5kZXggdmFsdWUsIEpT
VmFsdWUgY29uc3RhbnQpOworICAgIGJvb2wgY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQoTm9k
ZSYsIE5vZGVVc2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOwogICAgIAogICAgIGJvb2wgY29t
cGlsZVN0cmljdEVxKE5vZGUmKTsKICAgICAKQEAgLTE1OTMsNiArMTYwNSwxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5k
T1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZv
cihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7CiAgICAgfQorICAgIHZvaWQgc3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGVVc2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKKyAgICB7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRl
eCgpLCBqdW1wVG9GYWlsKTsKKyAgICB9CiAgICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9u
IGNoZWNrcyB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUlu
ZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKICAg
ICB7CkBAIC0xNjAwLDYgKzE2MTYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgSnVtcFZlY3RvcltpXSk7
CiAgICAgfQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVVc2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBqdW1wc1RvRmFpbCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wc1RvRmFpbCk7CisgICAgfQog
ICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4K
ICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKICAgICB7CkBA
IC0xNjA4LDYgKzE2MjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCkt
PmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0
LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5jb2Rl
QmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOwogICAgIH0KKyAgICB2
b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBOb2RlVXNlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBU
b0ZhaWwsIHJlY292ZXJ5KTsKKyAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNh
bGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgogICAgIHZvaWQgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNW
YWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0xNjIwLDYgKzE2NDQsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZUlu
ZGV4LCBtX2ppdC5qdW1wKCkpOwogICAgICAgICBtX2NvbXBpbGVPa2F5ID0gZmFsc2U7CiAgICAg
fQorICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNl
LmluZGV4KCkpOworICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBH
UFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0
dXJuRm9ybWF0KTsKQEAgLTE3MTIsMTYgKzE3NDAsMTYgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW50
ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEludGVnZXJPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBJbnRlZ2VyT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChq
aXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRl
eCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAjaWZuZGVmIE5E
RUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQogI2VuZGlmCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkp
CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7
CiAgICAgfQogCkBAIC0xNzY0LDEzICsxNzkyLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIERvdWJs
ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IERvdWJsZU9wZXJhbmQoU3BlY3VsYXRp
dmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IERvdWJsZU9wZXJhbmQo
U3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQoaml0KQot
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5kZXgoKSkK
ICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUoaW5kZXgpKQor
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZERvdWJsZShtX2luZGV4KSkKICAgICAgICAgICAgIGZw
cigpOwogICAgIH0KIApAQCAtMTgwNSw5ICsxODMzLDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgSlNW
YWx1ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEpTVmFsdWVPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBKU1ZhbHVlT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChq
aXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRl
eCgpKQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxp
ZEdQUlJlZykKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xODE2LDEyICsxODQ0LDEyIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGdwcigpOwogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CiAg
ICAgICAgIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAg
ICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZCht
X2luZGV4KSkKICAgICAgICAgICAgIGZpbGwoKTsKICNlbmRpZgogICAgIH0KQEAgLTE5MTksMTMg
KzE5NDcsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRl
eCBpbmRleCkKKyAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJ
bnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogICAgIApAQCAtMjA4OCwxNiAr
MjExNiwxNiBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVK
SVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVVc2UgdXNlKQogICAgICAgICA6IG1faml0
KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1faW5kZXgodXNlLmlu
ZGV4KCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5vbmUpCiAjZW5kaWYKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4
KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCiAgICAgICAgICAgICBncHIo
KTsKICAgICB9CiAKQEAgLTIxMzUsMTMgKzIxNjMsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4
KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1f
Z3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0yMTc2LDEz
ICsyMjA0LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgewog
cHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVK
SVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZVVzZSB1c2UpCiAgICAgICAgIDogbV9qaXQo
aml0KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9pbmRleCh1c2UuaW5k
ZXgoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVnKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQor
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGZwcigpOwog
ICAgIH0KIApAQCAtMjIxMiwxMyArMjI0MCwxMyBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxh
dGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVVc2UgdXNlKQogICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1f
aW5kZXgodXNlLmluZGV4KCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJl
ZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKGluZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCiAgICAgICAg
ICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIyNTMsMTMgKzIyODEsMTMgQEAgcHJpdmF0ZToKIAog
Y2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRl
eCkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCog
aml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRl
eChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwot
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125545</attachid>
            <date>2012-02-05 17:22:39 -0800</date>
            <delta_ts>2012-02-05 20:12:30 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>nodeuse_patch_6.diff</filename>
            <type>text/plain</type>
            <size>123581</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NzY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMi0wMi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRydzIGNoaWxkIHJlZmVyZW5jZXMgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyIHNob3VsZCBo
YXZlIHJvb20gZm9yIHR5cGUgaW5mb3JtYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Nzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgREZHOjpOb2RlOjpjaGlsZCBmaWVsZHMg
bm93IGNvbnRhaW4gYm90aCBhIERGRzo6Tm9kZUluZGV4ICh3aGljaCBpcyBqdXN0IGFuIHVuc2ln
bmVkKQorICAgICAgICBhbmQgYSBERkc6OlVzZUtpbmQgKHdoaWNoIGlzIGN1cnJlbnRseSBhbiBl
ZmZlY3RpdmVseSBlbXB0eSBlbnVtKS4gVGhleSBhcmUgZW5jYXBzdWxhdGVkCisgICAgICAgIHRv
Z2V0aGVyIGFzIGEgREZHOjpOb2RlVXNlLCB3aGljaCBjYW4gaW4gbW9zdCBjYXNlcyBzdGlsbCBi
ZSB1c2VkIGFzIGFuIGluZGV4IChmb3IKKyAgICAgICAgZXhhbXBsZSBERkc6OkdyYXBoLCBBYnN0
cmFjdFN0YXRlLCBhbmQgU3BlY3VsYXRpdmVKSVQgYWxsIGFjY2VwdCBOb2RlVXNlIGluIG1vc3Qg
cGxhY2VzCisgICAgICAgIHdoZXJlIHRoZXkgcmVhbGx5IHdhbnQgYSBOb2RlSW5kZXgpLgorICAg
ICAgICAKKyAgICAgICAgVGhlIE5vZGVVc2Ugc3RvcmVzIGJvdGggdGhlIGluZGV4IGFuZCB0aGUg
VXNlS2luZCB3aXRob3V0IGJsb2F0aW5nIHRoZSBtZW1vcnkgdXNhZ2Ugb2YKKyAgICAgICAgREZH
OjpOb2RlLCBzaW5jZSB3ZSByZWFsbHkgZG9uJ3QgbmVlZCBmdWxsIDMyIGJpdHMgZm9yIHRoZSBO
b2RlSW5kZXggKGEgREZHOjpOb2RlIGlzCisgICAgICAgIHJvdWdobHkgMTEgd29yZHMsIHNvIGlm
IHdlIGFzc3VtZSB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gdXNlIG1vcmUgdGhhbiAxR0IgdG8gREZH
IGNvbXBpbGUKKyAgICAgICAgc29tZXRoaW5nIC0gbGlrZWx5IGEgc2Vuc2libGUgYXNzdW1wdGlv
biEgLSB0aGVuIHdlIHdpbGwgb25seSBiZSBhYmxlIHRvIGhhdmUgcm9vbSBmb3IKKyAgICAgICAg
YWJvdXQgMjQgbWlsbGlvbiBub2Rlcywgd2hpY2ggbWVhbnMgd2Ugb25seSBuZWVkIGFib3V0IDI0
LjUgYml0cyBmb3IgdGhlIG5vZGUgaW5kZXgpLgorICAgICAgICBDdXJyZW50bHkgdGhlIERGRzo6
Tm9kZVVzZSBhbGxvY2F0ZXMgNCBiaXRzIGZvciB0aGUgVXNlS2luZCBhbmQgMjggYml0cyBmb3Ig
dGhlIGluZGV4LAorICAgICAgICBidXQgc3RvcmVzIHRoZSBpbmRleCBhcyBhIHNpZ25lZCBudW1i
ZXIgdG8gbWFrZSBOb05vZGUgd29yayBuYXR1cmFsbHkuIEhlbmNlIHdlIHJlYWxseQorICAgICAg
ICBqdXN0IGhhdmUgMjcgYml0cyBmb3IgdGhlIGluZGV4LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsIG9uIGFsbCBiZW5jaG1hcmtzIHdlIHRyYWNrLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRWYXJBcmdDaGlsZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
R3JhcGguaDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6b3Bl
cmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmF0KToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cmVmKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZGVyZWYpOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbGVhckFuZERlcmVmQ2hpbGQxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkMik6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmNsZWFyQW5kRGVyZWZDaGlsZDMpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpnZXRQcmVkaWN0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Y2hpbGQxVW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDIpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkMyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bnVtQ2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmR1bXBDaGlsZHJlbik6CisgICAgICAgIChOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVJlZmVyZW5jZUJsb2IuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoTm9kZVJlZmVyZW5jZUJsb2IpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGVSZWZlcmVuY2VCbG9iOjpOb2RlUmVmZXJlbmNlQmxvYik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVJlZmVyZW5jZUJsb2I6OmNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJl
bmNlQmxvYjo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6
Y2hpbGQyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQzKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6Y2hpbGQxVW5jaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZVJlZmVyZW5jZUJsb2I6OmZpcnN0Q2hpbGQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXRGaXJzdENoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlUmVmZXJlbmNlQmxvYjo6bnVtQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVSZWZlcmVuY2VCbG9iOjpzZXROdW1DaGlsZHJlbik6CisgICAgICAgICogZGZnL0RG
R05vZGVVc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoTm9kZVVzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6Tm9kZVVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZVVzZTo6aW5kZXhVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVVc2U6Omlu
ZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlVXNlOjpzZXRJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZVVzZTo6dXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6
c2V0VXNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6aXNTZXQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGVVc2U6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZVVzZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZVVzZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVVc2U6Om1ha2VXb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFn
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnZvdGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmNh
bm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c3RhcnRJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRCeVZhbExvYWRFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1TdWJzdGl0dXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAg
ICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAgICAoSlNDOjpERkc6OlNjb3JlQm9h
cmQ6OnVzZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckJ5dGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmF0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FuUmV1c2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp1c2UpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkZXRlY3RQZWVwSG9sZUJyYW5jaCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OkludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6SlNWYWx1ZU9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQ6OlNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQ6OlNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRl
RG91YmxlT3BlcmFuZDo6U3BlY3VsYXRlRG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZDo6U3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRv
SW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1
ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDEyLTAyLTA1ICBHeXV5b3Vu
ZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXSBTdXBw
b3J0IGphdmFzY3JpcHRjb3JlIHRlc3QgZm9yIEVGTCBwb3J0LiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODEsNiArODEsOCBAQAogCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3OTE0M0ZD
RDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAvKiBQ
YWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLzsg
fTsKKwkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0
REYzRjEzMDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY2RTE2QzE0REYzRjE2MDBCN0Iy
RTQgLyogREZHTm9kZVVzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR05vZGVVc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJG
RjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZH
Q0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMz
Q0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0Nh
cGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC04NzUsNiArODc3LDggQEAKIAkJMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R09wZXJhbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wZXJhbmRz
Lmg7IHBhdGggPSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR05v
ZGVSZWZlcmVuY2VCbG9iLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05v
ZGVSZWZlcmVuY2VCbG9iLmg7IHBhdGggPSBkZmcvREZHTm9kZVJlZmVyZW5jZUJsb2IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERG
R05vZGVVc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZVVzZS5o
OyBwYXRoID0gZGZnL0RGR05vZGVVc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3
QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ1OCw2ICsyNDYyLDggQEAKIAkJCQk4NkVDOURC
QjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuY3BwICovLAogCQkJCTg2RUM5REJD
MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICovLAogCQkJCTg2RUNBM0U5MTMy
REVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCisJCQkJMEY2NkUxNjgxNERGM0YxMzAwQjdC
MkU0IC8qIERGR05vZGVSZWZlcmVuY2VCbG9iLmggKi8sCisJCQkJMEY2NkUxNjkxNERGM0YxMzAw
QjdCMkU0IC8qIERGR05vZGVVc2UuaCAqLywKIAkJCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0Mg
LyogREZHT3BlcmFuZHMuaCAqLywKIAkJCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyogREZH
T3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJODZFQzlEQzAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09w
ZXJhdGlvbnMuaCAqLywKQEAgLTMxMjAsNiArMzEyNiw4IEBACiAJCQkJMEY5MzMyQTQxNENBN0RE
OTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1
MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHTm9kZVJlZmVyZW5jZUJsb2IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdOb2RlVXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJl
Z2luXTsKICAgICB9CiAgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlVXNlIG5v
ZGVVc2UpCisgICAgeworICAgICAgICByZXR1cm4gZm9yTm9kZShub2RlVXNlLmluZGV4KCkpOwor
ICAgIH0KKyAgICAKICAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8gaW5p
dGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCiAgICAgLy8gYXJndW1lbnRzLCBhbmQgdG8g
aW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQogICAgIC8vIGV4
ZWN1dGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhb
bm9kZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09
IFBoaSkgewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCBub2RlUHRyLT5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNzksNyArMTc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9
PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBu
b2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKS5p
bmRleCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBv
cmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMjE5LDcgKzIxOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQx
KCldOwogICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxkLm9wID09IFBoaSkgewogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZs
dXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBu
b2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGls
ZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICB9CkBAIC0yMzgsNyArMjM4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQ
dHItPmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpOwpAQCAtMzI3LDcgKzMyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAKICAgICAgICAgaWYgKG5vZGUub3AgPT0gVUludDMyVG9OdW1iZXIpCi0gICAg
ICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWVyaWMgY29uc3RhbnRz
IGJveGVkIGFzIEpTVmFsdWVzLgogICAgICAgICBpZiAobm9kZS5vcCA9PSBKU0NvbnN0YW50KSB7
CkBAIC01NzIsNyArNTcyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgdm9pZCBhZGRWYXJBcmdD
aGlsZChOb2RlSW5kZXggY2hpbGQpCiAgICAgewotICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hp
bGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFw
cGVuZChOb2RlVXNlKGNoaWxkKSk7CiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncysrOwogICAg
IH0KICAgICAKQEAgLTIyNDEsOSArMjI0MSw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nl
c3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1s
b2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCiAgICAgICAg
ICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRo
ZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKICAgICAgICAgICAgICAgICAvLyBhbmQgUGhp
cyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxl
LgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbV9ncmFwaFttX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0u
Y2hpbGQxKCldLnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG1fZ3Jh
cGhbbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpLmluZGV4KCldLnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1ZUlu
UHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNz
b3JdLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAg
ICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7CkBAIC0yMjY2LDExICsyMjY2
LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpID09IE5vTm9kZSkgeworICAgICAgICAg
ICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNl
bmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IHZh
bHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRD
aGlsZDEoTm9kZVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGls
ZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5k
dW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyNzgsMTEgKzIyNzgsMTEgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09
IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmlu
dGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBlbnRyeS5tX3BoaSwgdmFs
dWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBw
aGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoTm9kZVVzZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIGVudHJ5Lm1fcGhpKTsKICAgICAg
ICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rkb3V0KTsKQEAgLTIyOTAsMTEgKzIy
OTAsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICNlbmRpZgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHBoaU5vZGUtPmNoaWxkMygpID09IE5vTm9kZSkgeworICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LT5jaGlsZDMoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUu
XG4iLCBlbnRyeS5tX3BoaSwgdmFsdWVJblByZWRlY2Vzc29yKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IHZhbHVlSW5QcmVkZWNlc3Nv
cjsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoTm9kZVVzZSh2
YWx1ZUluUHJlZGVjZXNzb3IpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IGVudHJ5Lm1fcGhpKTsKICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oc3Rk
b3V0KTsKQEAgLTIzMTQsOSArMjMxNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQ
aGlTdGFjaygpCiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwogCi0gICAgICAgICAgICBuZXdQaGlOb2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMSA9IHBoaU5vZGUtPmNoaWxkMSgpOwotICAgICAgICAgICAgbmV3
UGhpTm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBwaGlOb2RlLT5jaGlsZDIoKTsKLSAgICAg
ICAgICAgIG5ld1BoaU5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gcGhpTm9kZS0+Y2hpbGQz
KCk7CisgICAgICAgICAgICBuZXdQaGlOb2RlLmNoaWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47
CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAg
ICBwcmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgbmV3UGhpKTsKQEAgLTIzMjQsOSAr
MjMyMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAg
ICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLmZpeGVkLmNoaWxkMSA9IG5ld1BoaTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVu
LmZpeGVkLmNoaWxkMiA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLmZpeGVkLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIHBoaU5vZGUtPmNo
aWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IsIE5vTm9kZSk7CiAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBw
cmludGYoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgZW50cnkubV9waGkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2
ICs5MiwxMSBAQCBzdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKICAgICB9CiB9OwogCitlbnVtIFVz
ZUtpbmQgeworICAgIFVudHlwZWRVc2UsCisgICAgTGFzdFVzZUtpbmQgLy8gTXVzdCBhbHdheXMg
YmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlzIHVzZWQgdG8gZGVub3RlIHRo
ZSBudW1iZXIgb2YgZW51bSBlbGVtZW50cy4KK307CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEwNjY5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTYgKzE2MywxNiBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCIsICIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGhhc1By
aW50ZWQgPSB0cnVlOwotICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CisgICAgICAgICAgICBwcmludGYoIkAldSIsIG1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLmluZGV4KCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlKQotICAgICAgICAgICAgcHJpbnRmKCJAJXUiLCBub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgIT0gTm9Ob2RlKQotICAgICAg
ICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBpZiAobm9kZS5j
aGlsZDMoKSAhPSBOb05vZGUpCi0gICAgICAgICAgICBwcmludGYoIiwgQCV1Iiwgbm9kZS5jaGls
ZDMoKSk7Ci0gICAgICAgIGhhc1ByaW50ZWQgPSBub2RlLmNoaWxkMSgpICE9IE5vTm9kZTsKKyAg
ICAgICAgaWYgKCEhbm9kZS5jaGlsZDEoKSkKKyAgICAgICAgICAgIHByaW50ZigiQCV1Iiwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgaWYgKCEhbm9kZS5jaGlsZDIoKSkKKyAgICAg
ICAgICAgIHByaW50ZigiLCBAJXUiLCBub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICBp
ZiAoISFub2RlLmNoaWxkMygpKQorICAgICAgICAgICAgcHJpbnRmKCIsIEAldSIsIG5vZGUuY2hp
bGQzKCkuaW5kZXgoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSAhIW5vZGUuY2hpbGQxKCk7CiAg
ICAgfQogCiAgICAgaWYgKG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3MoKSkgewpAQCAtMzA1LDIwICsz
MDUsMjAgQEAgdm9pZCBHcmFwaDo6ZHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICAgICAg
ICAgICAgICAgX2NoaWxkSWR4KyspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgICAgICB0aGluZ1RvRG8obV92YXJBcmdDaGlsZHJlbltfY2hp
bGRJZHhdKTsgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg
IGlmIChfbm9kZS5jaGlsZDEoKSA9PSBOb05vZGUpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoX25vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJiYgX25vZGUu
Y2hpbGQzKCkgPT0gTm9Ob2RlKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlm
ICghX25vZGUuY2hpbGQxKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBBU1NFUlQoIV9ub2RlLmNoaWxkMigpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgIV9ub2RlLmNo
aWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS5jaGlsZDEoKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAgICAgICAgIGlmIChfbm9kZS5jaGlsZDIoKSA9PSBOb05vZGUpIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBBU1NFUlQoX25vZGUuY2hpbGQzKCkgPT0g
Tm9Ob2RlKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICghX25vZGUu
Y2hpbGQyKCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIV9ub2RlLmNoaWxkMygpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgIHRoaW5nVG9Ebyhfbm9kZS5jaGlsZDIoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChfbm9kZS5jaGlsZDMo
KSA9PSBOb05vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGlmICghX25vZGUuY2hpbGQzKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHRoaW5nVG9Ebyhfbm9kZS5jaGls
ZDMoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEwNjY5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNiArNzEsMTUgQEAgc3RydWN0IFJlc29sdmVHbG9iYWxEYXRhIHsKIC8vIE5vZGVz
IHRoYXQgYXJlICdkZWFkJyByZW1haW4gaW4gdGhlIHZlY3RvciB3aXRoIHJlZkNvdW50IDAuCiBj
bGFzcyBHcmFwaCA6IHB1YmxpYyBWZWN0b3I8Tm9kZSwgNjQ+IHsKIHB1YmxpYzoKKyAgICB1c2lu
ZyBWZWN0b3I8Tm9kZSwgNjQ+OjpvcGVyYXRvcltdOworICAgIHVzaW5nIFZlY3RvcjxOb2RlLCA2
ND46OmF0OworICAgIAorICAgIE5vZGUmIG9wZXJhdG9yW10oTm9kZVVzZSBub2RlVXNlKSB7IHJl
dHVybiBhdChub2RlVXNlLmluZGV4KCkpOyB9CisgICAgY29uc3QgTm9kZSYgb3BlcmF0b3JbXShO
b2RlVXNlIG5vZGVVc2UpIGNvbnN0IHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAg
ICAKKyAgICBOb2RlJiBhdChOb2RlVXNlIG5vZGVVc2UpIHsgcmV0dXJuIGF0KG5vZGVVc2UuaW5k
ZXgoKSk7IH0KKyAgICBjb25zdCBOb2RlJiBhdChOb2RlVXNlIG5vZGVVc2UpIGNvbnN0IHsgcmV0
dXJuIGF0KG5vZGVVc2UuaW5kZXgoKSk7IH0KKyAgICAKICAgICAvLyBNYXJrIGEgbm9kZSBhcyBi
ZWluZyByZWZlcmVuY2VkLgogICAgIHZvaWQgcmVmKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAg
ewpAQCAtNzksMzUgKzg4LDQzIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGUucmVmKCkpCiAg
ICAgICAgICAgICByZWZDaGlsZHJlbihub2RlSW5kZXgpOwogICAgIH0KKyAgICB2b2lkIHJlZihO
b2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICByZWYobm9kZVVzZS5pbmRleCgpKTsKKyAg
ICB9CiAgICAgCiAgICAgdm9pZCBkZXJlZihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAg
ICAgICAgaWYgKGF0KG5vZGVJbmRleCkuZGVyZWYoKSkKICAgICAgICAgICAgIGRlcmVmQ2hpbGRy
ZW4obm9kZUluZGV4KTsKICAgICB9CisgICAgdm9pZCBkZXJlZihOb2RlVXNlIG5vZGVVc2UpCisg
ICAgeworICAgICAgICBkZXJlZihub2RlVXNlLmluZGV4KCkpOworICAgIH0KICAgICAKICAgICB2
b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChu
b2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5j
aGlsZDEoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS5jaGlsZHJl
bi5maXhlZC5jaGlsZDEpOwotICAgICAgICBub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IE5v
Tm9kZTsKKyAgICAgICAgZGVyZWYobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUuY2hpbGRy
ZW4uY2hpbGQxKCkgPSBOb2RlVXNlKCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGVhckFuZERlcmVm
Q2hpbGQyKE5vZGUmIG5vZGUpCiAgICAgewotICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5maXhl
ZC5jaGlsZDIgPT0gTm9Ob2RlKQorICAgICAgICBpZiAoIW5vZGUuY2hpbGQyKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGRlcmVmKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyKTsK
LSAgICAgICAgbm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDIgPSBOb05vZGU7CisgICAgICAgIGRl
cmVmKG5vZGUuY2hpbGQyKCkpOworICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMigpID0gTm9k
ZVVzZSgpOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlJiBub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID09IE5vTm9k
ZSkKKyAgICAgICAgaWYgKCFub2RlLmNoaWxkMygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBkZXJlZihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMyk7Ci0gICAgICAgIG5vZGUuY2hp
bGRyZW4uZml4ZWQuY2hpbGQzID0gTm9Ob2RlOworICAgICAgICBkZXJlZihub2RlLmNoaWxkMygp
KTsKKyAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UoKTsKICAgICB9CiAK
ICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBp
bmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCkBAIC0yNTUs
NyArMjcyLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFZlY3RvcjwgT3duUHRyPEJhc2ljQmxv
Y2s+ICwgOD4gbV9ibG9ja3M7Ci0gICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hp
bGRyZW47CisgICAgVmVjdG9yPE5vZGVVc2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAgIFZl
Y3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8
UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9yPE5vZGVJ
bmRleCwgOD4gbV9hcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw2ICsyNzIsNyBA
QCBwdWJsaWM6CiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gZ2V0IHByZWRpY3Rpb25zCiAgICAg
UHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUucHJl
ZGljdGlvbigpOyB9CiAgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKE5vZGVJbmRleCBu
b2RlSW5kZXgpIHsgcmV0dXJuIGdldFByZWRpY3Rpb24oZ3JhcGgoKVtub2RlSW5kZXhdKTsgfQor
ICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlVXNlIG5vZGVVc2UpIHsgcmV0dXJu
IGdldFByZWRpY3Rpb24obm9kZVVzZS5pbmRleCgpKTsgfQogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEwNjY5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9y
aWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR05vZGVSZWZlcmVu
Y2VCbG9iLmgiCiAjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKICNpbmNsdWRlICJERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCkBAIC0zNDcsMzYgKzM0OCwzMyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAs
IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAgICAgLCBjaGlsZHJlbihOb2RlUmVmZXJlbmNl
QmxvYjo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDAp
CiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAgIHsKICAgICAgICAgQVNT
RVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICBBU1NFUlQoIWhhc0FyaXRoTm9k
ZUZsYWdzKCkpOwotICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7Ci0gICAg
ICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMiA9IGNoaWxkMjsKLSAgICAgICAgY2hpbGRyZW4uZml4
ZWQuY2hpbGQzID0gY2hpbGQzOwogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2Rl
VHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hp
bGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQz
ID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQogICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKKyAgICAgICAgLCBjaGlsZHJlbihOb2RlUmVmZXJlbmNlQmxvYjo6Rml4ZWQsIGNoaWxk
MSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcElu
Zm8oaW1tLm1fdmFsdWUpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQogICAg
IHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwotICAgICAgICBjaGls
ZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxk
MiA9IGNoaWxkMjsKLSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gY2hpbGQzOwogICAg
IH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0
d28gaW1tZWRpYXRlIHZhbHVlcy4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKICAgICAgICAgOiBvcChvcCkKICAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisg
ICAgICAgICwgY2hpbGRyZW4oTm9kZVJlZmVyZW5jZUJsb2I6OkZpeGVkLCBjaGlsZDEsIGNoaWxk
MiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEu
bV92YWx1ZSkKQEAgLTM4NCwxNSArMzgyLDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBt
X3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5v
ZGVIYXNWYXJBcmdzKSk7Ci0gICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsK
LSAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gY2hpbGQyOwotICAgICAgICBjaGlsZHJl
bi5maXhlZC5jaGlsZDMgPSBjaGlsZDM7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBh
IG5vZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0
ZSB2YWx1ZXMuCiAgICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQgZmlyc3RDaGlsZCwg
dW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgICAgIDogb3Aob3ApCiAgICAgICAgICwgY29kZU9y
aWdpbihjb2RlT3JpZ2luKQorICAgICAgICAsIGNoaWxkcmVuKE5vZGVSZWZlcmVuY2VCbG9iOjpW
YXJpYWJsZSwgZmlyc3RDaGlsZCwgbnVtQ2hpbGRyZW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAg
ICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtNDAwLDggKzM5Niw2IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgewogICAg
ICAgICBBU1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7Ci0gICAgICAgIGNoaWxkcmVuLnZhcmlh
YmxlLmZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkOwotICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5u
dW1DaGlsZHJlbiA9IG51bUNoaWxkcmVuOwogICAgIH0KIAogICAgIGJvb2wgbXVzdEdlbmVyYXRl
KCkKQEAgLTg0NSw0MiArODM5LDQyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICEt
LW1fcmVmQ291bnQ7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGlsZDEoKQorICAgIE5v
ZGVVc2UgY2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFy
Z3MpKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmNoaWxkMSgpOwogICAgIH0KICAgICAKICAgICAvLyBUaGlzIGlzIHVzZWZ1
bCBpZiB5b3Ugd2FudCB0byBkbyBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNoaWxkCiAgICAg
Ly8gYmVmb3JlIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2UgdGhpcyB3aXRo
IGNhcmUgYW5kCiAgICAgLy8gYXZvaWQgaXQgaWYgcG9zc2libGUuCi0gICAgTm9kZUluZGV4IGNo
aWxkMVVuY2hlY2tlZCgpCisgICAgTm9kZVVzZSBjaGlsZDFVbmNoZWNrZWQoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICAgICAgcmV0dXJuIGNoaWxk
cmVuLmNoaWxkMVVuY2hlY2tlZCgpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBjaGlsZDIoKQor
ICAgIE5vZGVVc2UgY2hpbGQyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhh
c1ZhckFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMjsKKyAgICAg
ICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMigpOwogICAgIH0KIAotICAgIE5vZGVJbmRleCBjaGls
ZDMoKQorICAgIE5vZGVVc2UgY2hpbGQzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMzsK
KyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmNoaWxkMygpOwogICAgIH0KICAgICAKICAgICB1bnNp
Z25lZCBmaXJzdENoaWxkKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJB
cmdzKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0Q2hpbGQ7CisgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXJzdENoaWxkKCk7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIG51bUNoaWxkcmVuKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJB
cmdzKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnZhcmlhYmxlLm51bUNoaWxkcmVuOworICAg
ICAgICByZXR1cm4gY2hpbGRyZW4ubnVtQ2hpbGRyZW4oKTsKICAgICB9CiAgICAgCiAgICAgUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkKQEAgLTEwMzQsMzEgKzEwMjgsMjMgQEAgc3RydWN0IE5v
ZGUgewogICAgIAogICAgIHZvaWQgZHVtcENoaWxkcmVuKEZJTEUqIG91dCkKICAgICB7Ci0gICAg
ICAgIGlmIChjaGlsZDEoKSA9PSBOb05vZGUpCisgICAgICAgIGlmICghY2hpbGQxKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiQCV1IiwgY2hpbGQxKCkpOwot
ICAgICAgICBpZiAoY2hpbGQyKCkgPT0gTm9Ob2RlKQorICAgICAgICBmcHJpbnRmKG91dCwgIkAl
dSIsIGNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICBpZiAoIWNoaWxkMigpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBmcHJpbnRmKG91dCwgIiwgQCV1IiwgY2hpbGQyKCkpOwotICAg
ICAgICBpZiAoY2hpbGQzKCkgPT0gTm9Ob2RlKQorICAgICAgICBmcHJpbnRmKG91dCwgIiwgQCV1
IiwgY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgIGlmICghY2hpbGQzKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDMoKSk7CisgICAg
ICAgIGZwcmludGYob3V0LCAiLCBAJXUiLCBjaGlsZDMoKS5pbmRleCgpKTsKICAgICB9CiAgICAg
CiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4K
ICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRs
aW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRl
eCkuCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAg
dG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgotICAgIHVuaW9uIHsKLSAgICAgICAgc3Ry
dWN0IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzOwotICAg
ICAgICB9IGZpeGVkOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgZmly
c3RDaGlsZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuOwotICAgICAgICB9IHZh
cmlhYmxlOwotICAgIH0gY2hpbGRyZW47CisgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNo
aWxkcmVuLCBvciBsaW5rcyB0byBhIHZhcmlhYmxlIGxlbmd0aCBzZXQgb2YgY2hpbGRyZW4uCisg
ICAgTm9kZVJlZmVyZW5jZUJsb2IgY2hpbGRyZW47CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIHZp
cnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlUmVmZXJlbmNlQmxv
Yi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVJlZmVy
ZW5jZUJsb2IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVJlZmVyZW5jZUJsb2IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOb2Rl
UmVmZXJlbmNlQmxvYl9oCisjZGVmaW5lIERGR05vZGVSZWZlcmVuY2VCbG9iX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdOb2RlVXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgTm9kZVJlZmVyZW5jZUJsb2IgeworcHVibGljOgorICAg
IGVudW0gS2luZCB7CisgICAgICAgIEZpeGVkLAorICAgICAgICBWYXJpYWJsZQorICAgIH07CisK
KyAgICBOb2RlUmVmZXJlbmNlQmxvYihLaW5kIGtpbmQpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICA6IG1fa2luZChraW5kKQorI2VuZGlmCisgICAgeworICAgICAgICBpZiAoa2luZCA9
PSBWYXJpYWJsZSkgeworICAgICAgICAgICAgbV93b3Jkc1swXS5tX2VuY29kZWRXb3JkID0gVUlO
VF9NQVg7CisgICAgICAgICAgICBtX3dvcmRzWzFdLm1fZW5jb2RlZFdvcmQgPSBVSU5UX01BWDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlUmVmZXJlbmNlQmxvYihLaW5kIGtpbmQs
IE5vZGVJbmRleCBjaGlsZDEsIE5vZGVJbmRleCBjaGlsZDIsIE5vZGVJbmRleCBjaGlsZDMpCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICA6IG1fa2luZChGaXhlZCkKKyNlbmRpZgorICAg
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEZpeGVkKTsKKyAgICAgICAg
aW5pdGlhbGl6ZShjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICB9CisgICAgCisgICAgTm9k
ZVJlZmVyZW5jZUJsb2IoS2luZCBraW5kLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBu
dW1DaGlsZHJlbikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIDogbV9raW5kKFZhcmlh
YmxlKQorI2VuZGlmCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGtpbmQsIGtpbmQgPT0g
VmFyaWFibGUpOworICAgICAgICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hpbGQpOworICAgICAgICBz
ZXROdW1DaGlsZHJlbihudW1DaGlsZHJlbik7CisgICAgfQorICAgIAorICAgIGNvbnN0IE5vZGVV
c2UmIGNoaWxkKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaSA8IDMp
OworICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKKyAgICAgICAgcmV0dXJuIG1fd29y
ZHNbaV07CisgICAgfSAgICAKKyAgICAKKyAgICBOb2RlVXNlJiBjaGlsZCh1bnNpZ25lZCBpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCAzKTsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBG
aXhlZCk7CisgICAgICAgIHJldHVybiBtX3dvcmRzW2ldOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldENoaWxkKHVuc2lnbmVkIGksIE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgMzApOworICAgICAgICBBU1NFUlQobV9raW5kID09IEZpeGVkKTsKKyAgICAgICAg
bV93b3Jkc1tpXSA9IG5vZGVVc2U7CisgICAgfQorICAgIAorICAgIE5vZGVVc2UgY2hpbGQxKCkg
Y29uc3QgeyByZXR1cm4gY2hpbGQoMCk7IH0KKyAgICBOb2RlVXNlIGNoaWxkMigpIGNvbnN0IHsg
cmV0dXJuIGNoaWxkKDEpOyB9CisgICAgTm9kZVVzZSBjaGlsZDMoKSBjb25zdCB7IHJldHVybiBj
aGlsZCgyKTsgfQorCisgICAgTm9kZVVzZSYgY2hpbGQxKCkgeyByZXR1cm4gY2hpbGQoMCk7IH0K
KyAgICBOb2RlVXNlJiBjaGlsZDIoKSB7IHJldHVybiBjaGlsZCgxKTsgfQorICAgIE5vZGVVc2Um
IGNoaWxkMygpIHsgcmV0dXJuIGNoaWxkKDIpOyB9CisgICAgCisgICAgdm9pZCBzZXRDaGlsZDEo
Tm9kZVVzZSBub2RlVXNlKSB7IHNldENoaWxkKDAsIG5vZGVVc2UpOyB9CisgICAgdm9pZCBzZXRD
aGlsZDIoTm9kZVVzZSBub2RlVXNlKSB7IHNldENoaWxkKDEsIG5vZGVVc2UpOyB9CisgICAgdm9p
ZCBzZXRDaGlsZDMoTm9kZVVzZSBub2RlVXNlKSB7IHNldENoaWxkKDIsIG5vZGVVc2UpOyB9Cisg
ICAgCisgICAgTm9kZVVzZSBjaGlsZDFVbmNoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dvcmRz
WzBdOyB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplKE5vZGVVc2UgY2hpbGQxLCBOb2RlVXNl
IGNoaWxkMiwgTm9kZVVzZSBjaGlsZDMpCisgICAgeworICAgICAgICBjaGlsZCgwKSA9IGNoaWxk
MTsKKyAgICAgICAgY2hpbGQoMSkgPSBjaGlsZDI7CisgICAgICAgIGNoaWxkKDIpID0gY2hpbGQz
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoTm9kZUluZGV4IGNoaWxkMSwgTm9k
ZUluZGV4IGNoaWxkMiwgTm9kZUluZGV4IGNoaWxkMykKKyAgICB7CisgICAgICAgIGluaXRpYWxp
emUoTm9kZVVzZShjaGlsZDEpLCBOb2RlVXNlKGNoaWxkMiksIE5vZGVVc2UoY2hpbGQzKSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZmlyc3RDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fd29yZHNbMF0ubV9l
bmNvZGVkV29yZDsKKyAgICB9CisgICAgdm9pZCBzZXRGaXJzdENoaWxkKHVuc2lnbmVkIGZpcnN0
Q2hpbGQpCisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAg
ICAgbV93b3Jkc1swXS5tX2VuY29kZWRXb3JkID0gZmlyc3RDaGlsZDsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgbnVtQ2hpbGRyZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBWYXJpYWJsZSk7CisgICAgICAgIHJldHVybiBtX3dvcmRzWzFdLm1fZW5jb2RlZFdv
cmQ7CisgICAgfQorICAgIHZvaWQgc2V0TnVtQ2hpbGRyZW4odW5zaWduZWQgbnVtQ2hpbGRyZW4p
CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFZhcmlhYmxlKTsKKyAgICAgICAgbV93
b3Jkc1sxXS5tX2VuY29kZWRXb3JkID0gbnVtQ2hpbGRyZW47CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBOb2RlVXNlIG1fd29yZHNbM107CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEtp
bmQgbV9raW5kOworI2VuZGlmCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVSZWZlcmVuY2VCbG9i
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVVzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVXNlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHTm9kZVVzZV9oCisjZGVmaW5lIERGR05vZGVVc2VfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIE5vZGVSZWZlcmVuY2VCbG9iOworCitjbGFzcyBOb2RlVXNlIHsKK3B1YmxpYzoKKyAgICBO
b2RlVXNlKCkKKyAgICAgICAgOiBtX2VuY29kZWRXb3JkKG1ha2VXb3JkKE5vTm9kZSwgVW50eXBl
ZFVzZSkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBOb2RlVXNlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtlV29yZChub2RlSW5kZXgs
IFVudHlwZWRVc2UpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZVVzZShOb2RlSW5kZXgg
bm9kZUluZGV4LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIDogbV9lbmNvZGVkV29yZChtYWtl
V29yZChub2RlSW5kZXgsIHVzZUtpbmQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUlu
ZGV4IGluZGV4VW5jaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkV29yZCA+PiBzaGlm
dCgpOyB9CisgICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgPj4gc2hpZnQoKTsKKyAg
ICB9CisgICAgdm9pZCBzZXRJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgbV9lbmNvZGVkV29yZCA9IG1ha2VXb3JkKG5vZGVJbmRleCwgdXNlS2luZCgpKTsKKyAgICB9
CisgICAgCisgICAgVXNlS2luZCB1c2VLaW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1NldCgpKTsKKyAgICAgICAgdW5zaWduZWQgbWFza2VkID0gbV9lbmNvZGVkV29yZCAmICgo
KDEgPDwgc2hpZnQoKSkgLSAxKSk7CisgICAgICAgIEFTU0VSVChtYXNrZWQgPCBMYXN0VXNlS2lu
ZCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxVc2VLaW5kPihtYXNrZWQpOworICAgIH0K
KyAgICB2b2lkIHNldFVzZUtpbmQoVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzU2V0KCkpOworICAgICAgICBtX2VuY29kZWRXb3JkID0gbWFrZVdvcmQoaW5kZXgoKSwg
dXNlS2luZCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBp
bmRleFVuY2hlY2tlZCgpICE9IE5vTm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oTm9kZVVzZSBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VuY29kZWRXb3JkID09IG90aGVy
Lm1fZW5jb2RlZFdvcmQ7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShOb2RlVXNlIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW5jb2RlZFdvcmQgIT0gb3RoZXIubV9l
bmNvZGVkV29yZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5vZGVSZWZl
cmVuY2VCbG9iOworICAgIAorICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDQ7
IH0KKyAgICAKKyAgICBzdGF0aWMgaW50MzJfdCBtYWtlV29yZChOb2RlSW5kZXggbm9kZUluZGV4
LCBVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KCgoc3RhdGljX2Nhc3Q8aW50MzJfdD4obm9kZUluZGV4KSA8PCBzaGlmdCgpKSA+PiBz
aGlmdCgpKSkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1
c2VLaW5kIDwgTGFzdFVzZUtpbmQpOworICAgICAgICBBU1NFUlQoTGFzdFVzZUtpbmQgPD0gKDEg
PDwgc2hpZnQoKSkpOworICAgICAgICByZXR1cm4gKG5vZGVJbmRleCA8PCBzaGlmdCgpKSB8IHVz
ZUtpbmQ7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbV9lbmNvZGVkV29yZDsKK307CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oTm9kZVVzZSBub2RlVXNlLCBOb2RlSW5kZXggbm9kZUluZGV4
KQoreworICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkgPT0gbm9kZUluZGV4Owor
fQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVXNlIG5v
ZGVVc2UpCit7CisgICAgcmV0dXJuIG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSA9PSBub2RlSW5k
ZXg7Cit9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KE5vZGVVc2Ugbm9kZVVzZSwgTm9kZUluZGV4
IG5vZGVJbmRleCkKK3sKKyAgICByZXR1cm4gbm9kZVVzZS5pbmRleFVuY2hlY2tlZCgpICE9IG5v
ZGVJbmRleDsKK30KK2lubGluZSBib29sIG9wZXJhdG9yIT0oTm9kZUluZGV4IG5vZGVJbmRleCwg
Tm9kZVVzZSBub2RlVXNlKQoreworICAgIHJldHVybiBub2RlVXNlLmluZGV4VW5jaGVja2VkKCkg
IT0gbm9kZUluZGV4OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR05vZGVVc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDEwNjY5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgICAg
IGlmIChpc05vdE5lZ1plcm8obm9kZS5jaGlsZDEoKSkgfHwgaXNOb3ROZWdaZXJvKG5vZGUuY2hp
bGQyKCkpKQorICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLmNoaWxkMSgpLmluZGV4
KCkpIHx8IGlzTm90TmVnWmVybyhub2RlLmNoaWxkMigpLmluZGV4KCkpKQogICAgICAgICAgICAg
ICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWdaZXJvOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhm
bGFncyk7CkBAIC0xNTYsNyArMTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIGlmIChpc05vdFplcm8o
bm9kZS5jaGlsZDEoKSkgfHwgaXNOb3RaZXJvKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICAgICAg
aWYgKGlzTm90WmVybyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzTm90WmVybyhub2RlLmNo
aWxkMigpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGZsYWdzICY9IH5Ob2RlTmVlZHNOZWda
ZXJvOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CkBAIC0yMTAsMTMgKzIxMCwxMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2Rl
LmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hp
bGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW21fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF1dLm1lcmdlQXJpdGhOb2RlRmxh
Z3MoZmxhZ3MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNoaWxkMSgp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAg
IGlmICghbm9kZS5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2Rl
RmxhZ3MoZmxhZ3MpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9k
ZSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY2hpbGQzKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MygpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIH0KQEAgLTY3Niwy
MSArNjc2LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwcm9wYWdhdGVOb2RlUHJlZGljdGlv
bnMobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHZvdGUo
Tm9kZUluZGV4IG5vZGVJbmRleCwgVmFyaWFibGVBY2Nlc3NEYXRhOjpCYWxsb3QgYmFsbG90KQor
ICAgIHZvaWQgdm90ZShOb2RlVXNlIG5vZGVVc2UsIFZhcmlhYmxlQWNjZXNzRGF0YTo6QmFsbG90
IGJhbGxvdCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ncmFwaFtub2RlSW5kZXhdLm9wKSB7
CisgICAgICAgIHN3aXRjaCAobV9ncmFwaFtub2RlVXNlXS5vcCkgewogICAgICAgICBjYXNlIFZh
bHVlVG9OdW1iZXI6CiAgICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKICAgICAgICAgY2FzZSBW
YWx1ZVRvSW50MzI6CiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBu
b2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCk7CisgICAgICAgICAgICBub2Rl
VXNlID0gbV9ncmFwaFtub2RlVXNlXS5jaGlsZDEoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0gR2V0TG9jYWwpCi0gICAgICAgICAg
ICBtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoYmFsbG90KTsK
KyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZVVzZV0ub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAg
ICBtX2dyYXBoW25vZGVVc2VdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKGJhbGxvdCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgdm90ZShOb2RlJiBub2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGE6
OkJhbGxvdCBiYWxsb3QpCkBAIC03MDEsMTMgKzcwMSwxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9kZS5jaGlsZDEo
KSA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGlsZDEoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOwotICAgICAgICBpZiAo
bm9kZS5jaGlsZDIoKSA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5jaGlsZDIoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgdm90ZShub2RlLmNoaWxkMigpLCBiYWxsb3QpOwot
ICAgICAgICBpZiAobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpCisgICAgICAgIGlmICghbm9kZS5j
aGlsZDMoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdm90ZShub2RlLmNoaWxkMygp
LCBiYWxsb3QpOwogICAgIH0KQEAgLTgzNSwxMyArODM1LDEzIEBAIHByaXZhdGU6CiAgICAgICAg
IH0gd2hpbGUgKG1fY2hhbmdlZCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdG9Eb3VibGUoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB2b2lkIHRvRG91YmxlKE5vZGVVc2Ugbm9kZVVzZSkKICAg
ICB7Ci0gICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikg
eworICAgICAgICBpZiAobV9ncmFwaFtub2RlVXNlXS5vcCA9PSBWYWx1ZVRvTnVtYmVyKSB7CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgcHJp
bnRmKCIgIEAldSAtPiBWYWx1ZVRvRG91YmxlIiwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHBy
aW50ZigiICBAJXUgLT4gVmFsdWVUb0RvdWJsZSIsIG5vZGVVc2UuaW5kZXgoKSk7CiAjZW5kaWYK
LSAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5vcCA9IFZhbHVlVG9Eb3VibGU7CisgICAg
ICAgICAgICBtX2dyYXBoW25vZGVVc2VdLm9wID0gVmFsdWVUb0RvdWJsZTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtOTc3LDggKzk3Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QnlW
YWw6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6IHsKLSAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpICE9IE5vTm9kZSAmJiBtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm9wID09IE5vcCkKLSAgICAgICAgICAgICAgICBub2RlLmNoaWxk
cmVuLmZpeGVkLmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIGlmICghIW5vZGUuY2hpbGQz
KCkgJiYgbV9ncmFwaFtub2RlLmNoaWxkMygpXS5vcCA9PSBOb3ApCisgICAgICAgICAgICAgICAg
bm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IE5vZGVVc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMDA1LDEzICsxMDA1LDE3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAKICAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZUluZGV4XS5vcCA9PSBWYWx1ZVRvTnVtYmVyKQotICAgICAgICAgICAgbm9kZUlu
ZGV4ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZUluZGV4
ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9JbnQzMikKLSAgICAgICAgICAg
IG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CisgICAgTm9kZUluZGV4IGNhbm9uaWNh
bGl6ZShOb2RlVXNlIG5vZGVVc2UpCisgICAgeworICAgICAgICByZXR1cm4gY2Fub25pY2FsaXpl
KG5vZGVVc2UuaW5kZXhVbmNoZWNrZWQoKSk7CisgICAgfQogICAgIAogICAgIC8vIENvbXB1dGVz
IHdoZXJlIHRoZSBzZWFyY2ggZm9yIGEgY2FuZGlkYXRlIGZvciBDU0Ugc2hvdWxkIHN0YXJ0LiBE
b24ndCBjYWxsCiAgICAgLy8gdGhpcyBkaXJlY3RseTsgY2FsbCBzdGFydEluZGV4KCkgaW5zdGVh
ZCBhcyBpdCBkb2VzIGxvZ2dpbmcgaW4gZGVidWcgbW9kZS4KQEAgLTEwNjEsNyArMTA2NSwxMCBA
QCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBzdGFydEluZGV4KCkKICAgICB7CiAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIHN0YXJ0
SW5kZXhGb3JDaGlsZHJlbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxk
MygpKTsKKyAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigKKyAgICAgICAgICAg
IG5vZGUuY2hpbGQxKCkuaW5kZXhVbmNoZWNrZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQy
KCkuaW5kZXhVbmNoZWNrZWQoKSwKKyAgICAgICAgICAgIG5vZGUuY2hpbGQzKCkuaW5kZXhVbmNo
ZWNrZWQoKSk7CiAgICAgfQogICAgIAogICAgIE5vZGVJbmRleCBlbmRJbmRleEZvclB1cmVDU0Uo
KQpAQCAtMTIwNyw3ICsxMjE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICAgICAgICAgIGlmIChub2Rl
LnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjM1LDcgKzEyNDIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGlmICghYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUo
Y2hpbGQyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpLmluZGV4KCk7CiAgICAgICAgICAg
ICAgICAgLy8gV2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgUHV0QnlWYWwgd2lsbCBjbG9iYmVyIHRo
ZSBsb2NhdGlvbiB3ZSdyZSBnZXR0aW5nIGZyb20uCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIGNhbiBkbyBiZXR0ZXI7IGlmIHdlIGtub3cgdGhhdCB0aGUgUHV0QnlWYWwgaXMgYWNjZXNz
aW5nIGFuIGFycmF5IG9mIGEKICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZSB0aGFu
IHRoZSBHZXRCeVZhbCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhleSB3b24ndCBjbG9iYmVyIGVhY2gg
b3RoZXIuCkBAIC0xMzI4LDcgKzEzMzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlk
ZW50aWZpZXJOdW1iZXIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkg
PT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKS5pbmRleCgpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDIsMjIgKzE0NDksMjIgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtU3Vic3Rp
dHV0aW9uKE5vZGVJbmRleCYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKKyAgICB2b2lkIHBl
cmZvcm1TdWJzdGl0dXRpb24oTm9kZVVzZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKICAg
ICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQu
Ci0gICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgIGlmICghY2hpbGQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBh
bnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFj
ZW1lbnRzW2NoaWxkXTsKKyAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50ID0gbV9yZXBsYWNl
bWVudHNbY2hpbGQuaW5kZXgoKV07CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBjaGlsZCA9IHJlcGxhY2Vt
ZW50OworICAgICAgICBjaGlsZC5zZXRJbmRleChyZXBsYWNlbWVudCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRo
ZSByZXBsYWNlbWVudCBkb2VzIG5vdAogICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0g
ICAgICAgIEFTU0VSVChtX3JlcGxhY2VtZW50c1tjaGlsZF0gPT0gTm9Ob2RlKTsKKyAgICAgICAg
QVNTRVJUKG1fcmVwbGFjZW1lbnRzW2NoaWxkLmluZGV4KCldID09IE5vTm9kZSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoYWRkUmVmKQogICAgICAgICAgICAgbV9ncmFwaFtjaGlsZF0ucmVmKCk7
CkBAIC0xNTA1LDkgKzE1MTIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQogICAgICAgICAgICAgICAgIHBl
cmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hv
dWxkR2VuZXJhdGUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0
aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSwgc2hvdWxkR2VuZXJhdGUpOwotICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMiwg
c2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNo
aWxkcmVuLmZpeGVkLmNoaWxkMywgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uY2hpbGQyKCksIHNo
b3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGls
ZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoIXNob3VsZEdlbmVyYXRlKQpAQCAtMTYwMiwzNyArMTYwOSwzNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICBpZiAo
YnlWYWxJc1B1cmUobm9kZSkpCi0gICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlW
YWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpOworICAgICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSwgbm9kZS5jaGlsZDIoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICAgICAgaWYg
KGJ5VmFsSXNQdXJlKG5vZGUpICYmIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQx
KCksIG5vZGUuY2hpbGQyKCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgIGlmIChieVZhbElzUHVy
ZShub2RlKSAmJiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCks
IG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkgIT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIG5vZGUu
b3AgPSBQdXRCeVZhbEFsaWFzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVy
ZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpKSkKKyAg
ICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVy
ZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgot
ICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9uKCks
IG5vZGUuY2hpbGQxKCkpKQorICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlv
bihub2RlLmZ1bmN0aW9uKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CiAgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uID0g
ISghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbik7Ci0g
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVs
aW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9h
ZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9kZUhhc0ludGVnZXJJbmRleFBy
ZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9w
ZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1p
bmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVt
YmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Njb3JlQm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Njb3JlQm9hcmQuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTY29yZUJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CisjaW5j
bHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC0xMDYsNiArMTA2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1fZnJlZS5hcHBlbmQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQorICAgIHZvaWQgdXNlKE5v
ZGVVc2UgY2hpbGQpCisgICAgeworICAgICAgICB1c2UoY2hpbGQuaW5kZXhVbmNoZWNrZWQoKSk7
CisgICAgfQogCiAgICAgdW5zaWduZWQgaGlnaFdhdGVybWFyaygpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAxMDY2OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDcgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYgbm9kZSkKIHsKLSAgICBp
ZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bk51bWVy
aWMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIG9wMS5maWxsKCk7CiAgICAgICAgIGlmIChv
cDEuaXNEb3VibGUoKSkgewpAQCAtMzgxLDggKzM4MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIG9w
MSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AxLCBmYWxzZSk7CiAK
LSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0gICAgQVNTRVJU
KCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICBBU1NFUlQoIWlzTnVtYmVyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CiAKICAgICBHUFJSZWcgdGFnR1BSID0gb3Ax
LnRhZ0dQUigpOwogICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKQEAg
LTQxNSw5ICs0MTUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVl
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUm
IG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwor
ICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogCi0g
ICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpA
QCAtNTMyLDE0ICs1MzIsMTQgQEAgSklUQ29tcGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNh
Y2hlZAogICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRH
UFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgTm9kZUluZGV4
IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXls
b2FkR1BSLCBOb2RlVXNlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aFRhcmdldCkKIHsKICAgICBtX2ppdC5iZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOwogICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIEpJVENv
bXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIG1f
aml0LmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOwogCi0gICAgd3JpdGVCYXJyaWVyKGJhc2VQ
YXlsb2FkR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyRm9yUHJvcGVy
dHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwg
dmFsdWVUYWdHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2Ny
YXRjaEdQUik7CiAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQ
YXlsb2FkR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hH
UFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiB0YWdTdG9yZVdpdGhQYXRjaCA9IG1f
aml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlVGFnR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKQEAgLTU3Niw3ICs1NzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJv
cGVydHlBY2Nlc3NSZWNvcmQoY29kZU9yaWdpbiwgc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlv
bkNhbGwsIHN0cnVjdHVyZUNoZWNrLCBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCh0YWdT
dG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QocGF5
bG9hZFN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBzbG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2Fz
dDxpbnQ4X3Q+KGJhc2VQYXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZVRhZ0dQUiks
IHNhZmVDYXN0PGludDhfdD4odmFsdWVQYXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3Jh
dGNoR1BSKSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlQ29tcGFyZU51bGwoTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKE5vZGVV
c2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMs
IG9wZXJhbmQpOwogICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CkBAIC01ODYs
MTMgKzU4NiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogCiAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQp
KQorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkKICAgICAgICAgbm90Q2Vs
bCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIG1faml0LnRlc3Q4KGludmVydCA/IEpJVENv
bXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlc3VsdFBheWxvYWRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0UGF5
bG9hZEdQUik7CiAgICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgeworICAgIGlm
ICghaXNLbm93bkNlbGwob3BlcmFuZC5pbmRleCgpKSkgewogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgbm90Q2VsbC5saW5r
KCZtX2ppdCk7CkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVOb25QZQogICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21w
aWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChOb2RlVXNlIG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgs
IGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5k
ZXgpOwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgp
OwpAQCAtNjMwLDEzICs2MzAsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaAogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7CiAgICAgCi0gICAg
aWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQu
aW5kZXgoKSkpCiAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGFyZ1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
ICAgICAKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgIGFkZEJyYW5j
aChtX2ppdC5icmFuY2hUZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBp
bGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSksIHRha2VuKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9w
ZXJhbmQpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKSB7CiAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAgICAgCiAgICAgICAg
IG5vdENlbGwubGluaygmbV9qaXQpOwpAQCAtNjUxLDcgKzY1MSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAo
KSwgbm90VGFrZW4pOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhcmVOdWxsKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCkKK2Jv
b2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYgbm9kZSwg
Tm9kZVVzZSBvcGVyYW5kLCBib29sIGludmVydCkKIHsKICAgICBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoTm9kZUluZGV4
ICE9IE5vTm9kZSkgewpAQCAtNjk4LDcgKzY5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlUGVlcGgKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlz
S25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgaWYgKGlzS25vd25Ob3RJbnRl
Z2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGls
ZDIoKS5pbmRleCgpKSkgewogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCkBAIC03MTYsMTQgKzcxNiwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIGFyZzEu
dXNlKCk7CiAgICAgICAgIGFyZzIudXNlKCk7CiAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdl
cihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MSgpLmluZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdl
cihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MigpLmluZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAKICAgICAgICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaDMyKGNvbmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiksIHRha2Vu
KTsKICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKCFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RU
YWtlbik7CiAgICAgCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC03NTEs
NyArNzUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAg
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAKLSAgICBpZiAoaXNL
bm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5j
aGlsZDIoKSkpIHsKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRl
eCgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSID0gcmVzdWx0LmdwcigpOwogICAgIApAQCAtNzY5LDE0ICs3NjksMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBhcmcxLnVzZSgpOwogICAg
ICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcxVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQyKCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5k
ZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcyVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSkpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBh
cmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIAot
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgo
KSkpIHsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5q
dW1wKCk7CiAgICAgCiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC04MjIs
NyArODIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAg
IGFyZzEudXNlKCk7CiAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwo
bm9kZS5jaGlsZDEoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAo
aXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNo
aWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRo
ZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAg
ICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgYWRk
QnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFQYXlsb2FkR1BS
LCBhcmcyUGF5bG9hZEdQUiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwpAQCAtODYxLDcg
Kzg2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBh
cmcxLnVzZSgpOwogICAgIGFyZzIudXNlKCk7CiAgICAgCi0gICAgaWYgKGlzS25vd25DZWxsKG5v
ZGUuY2hpbGQxKCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgaWYgKGlz
S25vd25DZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGls
ZDIoKS5pbmRleCgpKSkgewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUg
YXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAgICAgICAg
Ly8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUik7CkBAIC05MDgsMTEgKzkw
OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAKICAgICBD
YWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0gbm9kZS5vcCA9PSBDYWxsID8gQ2FsbExp
bmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CiAKLSAgICBOb2RlSW5kZXgg
Y2FsbGVlTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmly
c3RDaGlsZCgpXTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlTm9kZUlu
ZGV4KTsKKyAgICBOb2RlVXNlIGNhbGxlZU5vZGVVc2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJn
Q2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0
aGlzLCBjYWxsZWVOb2RlVXNlKTsKICAgICBHUFJSZWcgY2FsbGVlVGFnR1BSID0gY2FsbGVlLnRh
Z0dQUigpOwogICAgIEdQUlJlZyBjYWxsZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxvYWRHUFIo
KTsKLSAgICB1c2UoY2FsbGVlTm9kZUluZGV4KTsKKyAgICB1c2UoY2FsbGVlTm9kZVVzZSk7CiAK
ICAgICAvLyBUaGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNoaWxkIGlzIGVpdGhlciB0aGUg
ZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKICAgICAvLyByZWNlaXZlciAobWV0aG9kIGNh
bGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgpAQCAtOTI0LDExICs5
MjQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIG1f
aml0LnN0b3JlMzIoY2FsbGVlVGFnR1BSLCBjYWxsRnJhbWVUYWdTbG90KFJlZ2lzdGVyRmlsZTo6
Q2FsbGVlKSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykg
ewotICAgICAgICBOb2RlSW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFy
Z0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsKKyAgICAgICAgTm9kZVVzZSBhcmdOb2RlVXNl
ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSAr
IGldOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZVVzZSk7CiAgICAg
ICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CiAgICAgICAgIEdQUlJlZyBhcmdQ
YXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdXNlKGFyZ05vZGVJbmRleCk7
CisgICAgICAgIHVzZShhcmdOb2RlVXNlKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1Rh
Z0dQUiwgYXJndW1lbnRUYWdTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwogICAgICAgICBt
X2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIGFyZ3VtZW50UGF5bG9hZFNsb3QoaSArIGR1bW15
VGhpc0FyZ3VtZW50KSk7CkBAIC0xNDM5LDcgKzE0MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgCiAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhp
cyk7CiAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgaWYgKGlzS25vd25O
b3ROdW1iZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2RlLmNoaWxkMigp
KSkKKyAgICBpZiAoaXNLbm93bk5vdE51bWJlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlz
S25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQ
YXlsb2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRhZ0dQUiwgb3AyUGF5
bG9hZEdQUik7CiAgICAgZWxzZQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
QWRkLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG9wMVRhZ0dQUiwgb3Ax
UGF5bG9hZEdQUiwgb3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKTsKQEAgLTE0NDcsOSArMTQ0Nyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJv
b2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZVVzZSBub2RlVXNlLCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbywgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKLSAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGVVc2UpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgIEdQ
UlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CkBAIC0xNDU3LDcgKzE0NTcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgaWYg
KG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BS
KSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTQ2Nyw3ICsx
NDY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVV
c2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9h
ZEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CiAgICAgfQogICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKQEAgLTE0Nzgs
NyArMTQ3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYgbm9kZSkKIHsKLSAg
ICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkgfHwgaXNCb29sZWFuUHJlZGljdGlv
bihtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGUuY2hpbGQxKCkpKSkgeworICAgIGlmIChpc0tub3du
Qm9vbGVhbihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzQm9vbGVhblByZWRpY3Rpb24obV9q
aXQuZ2V0UHJlZGljdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpKSkgewogICAgICAgICBTcGVj
dWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIG1faml0LnhvcjMyKFRy
dXN0ZWRJbW0zMigxKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkBAIC0xNTM1LDkgKzE1
MzUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgYm9v
bGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJ
bmRleCBub3RUYWtlbiwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1
bGF0aW9uQ2hlY2spCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChOb2RlVXNlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQog
ewotICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CisgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgR1BS
UmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTE1NDUsNyArMTU0
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIpLCBub2RlVXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIsIEpTQ2Vs
bDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFz
c0luZm8pKSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAg
IG5vdENlbGwubGluaygmbV9qaXQpOwpAQCAtMTU1NCw3ICsxNTU0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVl
UGF5bG9hZEdQUiksIG5vZGVVc2UsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CiAgICAg
fQogCiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBAIC0xNTY4LDcgKzE1Njgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgQmxvY2tJ
bmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAgICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKLSAgICBpZiAoaXNLbm93bkJvb2xl
YW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEo
KS5pbmRleCgpKSkgewogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlv
biBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKIApAQCAtMTgwMCwxOCArMTgw
MCwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2Fz
ZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AyKTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICB9IGVsc2Ug
aWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICB9IGVsc2UgaWYg
KGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKLSAgICAgICAgICAgIGJpdE9w
KG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSwgb3AxLmdwcigpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTE4MzAsMTEgKzE4MzAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKIAotICAgICAgICAgICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtMjA5MSwxMiArMjA5MSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAg
IGlmIChpc051bGxDb25zdGFudChub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoaXNOdWxs
Q29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgaWYgKG5vblNw
ZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS5jaGlsZDIoKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlz
TnVsbENvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIGlmIChpc051bGxDb25zdGFu
dChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBpZiAobm9uU3BlY3VsYXRp
dmVDb21wYXJlTnVsbChub2RlLCBub2RlLmNoaWxkMSgpKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBicmVhazsKQEAgLTI2MzEsNyArMjYzMSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEJyYW5jaDoK
LSAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgIGlmIChpc1N0cmljdElu
dDMyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmxvY2tJ
bmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CkBAIC0yNzIwLDcgKzI3MjAsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAg
ICAgICAvLyBGSVhNRTogQWRkIHN0cmluZyBzcGVjdWxhdGlvbiBoZXJlLgogICAgICAgICAKLSAg
ICAgICAgYm9vbCB3YXNQcmltaXRpdmUgPSBpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSB8
fCBpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYm9vbCB3YXNQcmltaXRp
dmUgPSBpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Cb29s
ZWFuKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRUYWcodGhpcywgb3AxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYwLDcgKzM2MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9k
ZUkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5v
ZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7Cisg
ICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwpAQCAtMzcxLDggKzM3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlVmFsdWUKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAKLSAgICBBU1NFUlQo
IWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0gICAgQVNTRVJUKCFpc051bWJlckNv
bnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICBBU1NFUlQoIWlzTnVtYmVyQ29uc3RhbnQobm9kZS5j
aGlsZDEoKS5pbmRleCgpKSk7CiAgICAgCiAgICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBvcDEuZ3By
KCk7CiAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKQEAgLTQwNCw5ICs0MDQsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNT
RVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAgIEFTU0VSVCghaXNJbnQz
MkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgIAotICAgIGlmIChpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSgpLmluZGV4KCkpKSB7CiAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAg
ICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTUxMiwxMyArNTEy
LDEzIEBAIEpJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWQKICAgICByZXR1
cm4gZnVuY3Rpb25DYWxsOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwg
Tm9kZUluZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1
dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogewogICAgIAogICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIEpJVENvbXBp
bGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CiAKLSAgICB3cml0ZUJhcnJp
ZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlSW5kZXgsIFdyaXRlQmFycmllckZvclByb3BlcnR5
QWNjZXNzLCBzY3JhdGNoR1BSKTsKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIs
IHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAK
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVz
c09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAw
KSk7CkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJ
ZChDb2RlTwogICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3Jk
KGNvZGVPcmlnaW4sIHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVD
aGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3Qoc3RvcmVXaXRoUGF0Y2gubGFiZWwo
KSksIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZUdQUiksIHNhZmVD
YXN0PGludDhfdD4odmFsdWVHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJl
TnVsbChOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZVVzZSBvcGVyYW5kLCBi
b29sIGludmVydCkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7CiAg
ICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKQEAgLTU2NCwxMyArNTY0LDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAKICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDZWxsOwogICAgIAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCisg
ICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKQogICAgICAgICBub3RDZWxsID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKICAgICBtX2ppdC50ZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBp
bGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25DZWxs
KG9wZXJhbmQpKSB7CisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKSB7CiAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAog
ICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTU4Niw3ICs1ODYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4
IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZVVzZSBv
cGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBO
b2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKICAgICBCbG9ja0luZGV4IHRh
a2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKQEAgLTYwNywxMyArNjA3LDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RDZWxsOwogICAgIAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFu
ZCkpCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKQogICAgICAgICBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoaW52ZXJ0ID8gSklUQ29t
cGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YWtlbik7CiAgICAgCi0g
ICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgeworICAgIGlmICghaXNLbm93bkNlbGwob3Bl
cmFuZC5pbmRleCgpKSkgewogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtl
bik7CiAgICAgICAgIAogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTYyNyw3ICs2
MjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAg
IGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKIH0KIAotYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiBub2RlLCBOb2RlSW5kZXggb3Bl
cmFuZCwgYm9vbCBpbnZlcnQpCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhcmVOdWxsKE5vZGUmIG5vZGUsIE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQpCiB7CiAg
ICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAg
ICAgaWYgKGJyYW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKQEAgLTY3Miw3ICs2NzIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdl
cihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpKSkgewor
ICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25v
d25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAKQEAgLTY5MCwxNCArNjkwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlUGVlcGgKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsKICAg
ICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAg
aWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFy
ZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2gzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOwogICAgIAotICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMigpKSkgeworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAKICAgICAgICAg
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKQEAgLTcyMyw3ICs3MjMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoOwogICAgIAotICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2RlLmNo
aWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgIGlmIChp
c0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25Ob3RJbnRl
Z2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKQEAg
LTc0MiwxNCArNzQyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGUKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsKICAgICAKLSAgICAg
ICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpCiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBhcmcxR1BS
LCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgfHwgIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgICAgICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CkBAIC03OTUsNyArNzk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGFyZzEudXNlKCk7CiAgICAgYXJnMi51c2Uo
KTsKICAgICAKLSAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKSkgJiYgaXNLbm93bkNl
bGwobm9kZS5jaGlsZDIoKSkpIHsKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAg
IC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0
aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBi
ZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRD
b21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRh
a2VuKTsKQEAgLTg0NCw3ICs4NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlCiAgICAgYXJnMS51c2UoKTsKICAgICBhcmcyLnVzZSgpOwogICAgIAotICAgIGlm
IChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigp
KSkgeworICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpLmluZGV4KCkpICYmIGlzS25v
d25DZWxsKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAgICAgLy8gc2VlIGlmIHdlIGdl
dCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRo
ZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFs
LgogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKQEAgLTkxNywxMCAr
OTE3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICAK
ICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlID0gbm9kZS5vcCA9PSBDYWxsID8g
Q2FsbExpbmtJbmZvOjpDYWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CiAgICAgCi0gICAg
Tm9kZUluZGV4IGNhbGxlZU5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKV07Ci0gICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNh
bGxlZU5vZGVJbmRleCk7CisgICAgTm9kZVVzZSBjYWxsZWVOb2RlVXNlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBjYWxsZWUodGhpcywgY2FsbGVlTm9kZVVzZSk7CiAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNh
bGxlZS5ncHIoKTsKLSAgICB1c2UoY2FsbGVlTm9kZUluZGV4KTsKKyAgICB1c2UoY2FsbGVlTm9k
ZVVzZSk7CiAgICAgCiAgICAgLy8gVGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBp
cyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCiAgICAgLy8gcmVjZWl2
ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4K
QEAgLTkzMSwxMCArOTMxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUm
IG5vZGUKICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGNhbGxGcmFtZVNsb3QoUmVnaXN0
ZXJGaWxlOjpDYWxsZWUpKTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3Nl
ZEFyZ3M7IGkrKykgewotICAgICAgICBOb2RlSW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQuZ3Jh
cGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsKKyAgICAgICAgTm9kZVVz
ZSBhcmdOb2RlVXNlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RD
aGlsZCgpICsgMSArIGldOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9k
ZVVzZSk7CiAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgIHVzZShh
cmdOb2RlSW5kZXgpOworICAgICAgICB1c2UoYXJnTm9kZVVzZSk7CiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFyZ3VtZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1l
bnQpKTsKICAgICB9CkBAIC0xNDU5LDkgKzE0NTksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xh
c3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8p
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BS
KSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7
CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkp
Lm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5m
b09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5v
ZGUuY2hpbGQyKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3Zl
KEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CkBAIC0xNTExLDcgKzE1MTEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAKICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGlmIChpc0tub3duTm90
TnVtYmVyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDIoKSkp
CisgICAgaWYgKGlzS25vd25Ob3ROdW1iZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tu
b3duTm90TnVtYmVyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCiAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdC5ncHIoKSwgb3AxR1BSLCBvcDJH
UFIpOwogICAgIGVsc2UKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwg
cmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CkBAIC0xNTE5LDE2ICsxNTE5LDE2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZVVzZSBu
b2RlVXNlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgYm9vbCBuZWVkU3BlY3VsYXRpb25D
aGVjaykKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOworICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UpOwogICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG5lZWRTcGVj
dWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjpjbGFz
c0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykp
KTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIG5vZGVVc2UsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVz
dWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwog
ICAgIApAQCAtMTUzNyw3ICsxNTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdE9yT3RoZQogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBtX2pp
dC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihWYWx1ZU51bGwpKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIH0KICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BS
KTsKICAgICAKQEAgLTE1NDgsNyArMTU0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RPck90aGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3Qo
Tm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsK
KyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAg
ICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIApAQCAtMTYy
MywxNiArMTYyMywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChO
CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0
SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBC
bG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbywgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVVc2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtl
biwgQmxvY2tJbmRleCBub3RUYWtlbiwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIGJvb2wg
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZUluZGV4KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlKTsKICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgCiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFs
dWVHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BS
LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoY2xhc3NJbmZvKSkpOwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAg
ICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTE2NDAsNyArMTY0MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBpZiAobmVlZFNwZWN1bGF0
aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAg
ICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5k
ZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
VmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkp
CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKQEAgLTE2NTYsNyAr
MTY1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICBC
bG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKLSAgICBpZiAoaXNL
bm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAKICAg
ICAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKQEAgLTE4NzksMTggKzE4NzksMTgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQml0
QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMik7CiAKLSAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0lu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwg
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSksIG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNo
aWxkMigpLmluZGV4KCkpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0g
ZWxzZSB7CkBAIC0xOTA5LDExICsxOTA5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoK
ICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpLmlu
ZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDIoKSkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
c2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigp
LmluZGV4KCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTIxNDcsMTIgKzIxNDcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBpZiAo
aXNOdWxsQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVsbENvbnN0
YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpIHsKICAgICAgICAgICAgIGlmIChub25TcGVjdWxh
dGl2ZUNvbXBhcmVOdWxsKG5vZGUsIG5vZGUuY2hpbGQyKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc051bGxD
b25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoaXNOdWxsQ29uc3RhbnQobm9k
ZS5jaGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZlQ29t
cGFyZU51bGwobm9kZSwgbm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjYxLDcgKzI2NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAg
ICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihu
b2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwpAQCAtMjczOCw3ICsyNzM4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
Ly8gRklYTUU6IEFkZCBzdHJpbmcgc3BlY3VsYXRpb24gaGVyZS4KICAgICAgICAgCi0gICAgICAg
IGJvb2wgd2FzUHJpbWl0aXZlID0gaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkgfHwgaXNL
bm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJvb2wgd2FzUHJpbWl0aXZlID0g
aXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKS5pbmRleCgpKSB8fCBpc0tub3duQm9vbGVhbihu
b2RlLmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIyICs4Nywy
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlJiBuCiAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKICAgICAgICAg
ICAgIHVzZShtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICB9
IGVsc2UgewotICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKLSAgICAg
ICAgaWYgKGNoaWxkMSA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxk
MigpID09IE5vTm9kZSAmJiBub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CisgICAgICAgIE5vZGVV
c2UgY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgaWYgKCFjaGlsZDEpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDIoKSAmJiAhbm9kZS5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdXNlKGNoaWxkMSk7CiAgICAgICAgIAot
ICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKLSAgICAgICAgaWYgKGNo
aWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5v
Tm9kZSk7CisgICAgICAgIE5vZGVVc2UgY2hpbGQyID0gbm9kZS5jaGlsZDIoKTsKKyAgICAgICAg
aWYgKCFjaGlsZDIpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jaGlsZDMoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdXNlKGNoaWxkMik7CiAgICAgICAg
IAotICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsKLSAgICAgICAgaWYg
KGNoaWxkMyA9PSBOb05vZGUpCisgICAgICAgIE5vZGVVc2UgY2hpbGQzID0gbm9kZS5jaGlsZDMo
KTsKKyAgICAgICAgaWYgKCFjaGlsZDMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHVz
ZShjaGlsZDMpOwogICAgIH0KQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjptYXJrQ2VsbENhcmQoTWFjcm9BCiAjZW5kaWYKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXgg
dmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2YWx1ZVVzZSwgV3JpdGVCYXJy
aWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKIHsK
ICAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7
CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQ
UlJlZwogICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CiAgICAgVU5VU0VEX1BBUkFNKHVzZUtp
bmQpOwogCi0gICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlSW5kZXgpKQorICAgIGlmIChpc0tu
b3duTm90Q2VsbCh2YWx1ZVVzZS5pbmRleCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQpAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKICAgICAKICAgICBKSVRDb21waWxlcjo6
SnVtcCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7Ci0gICAgaWYg
KCFpc0tub3duQ2VsbCh2YWx1ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGljdGlvbihtX2ppdC5nZXRQ
cmVkaWN0aW9uKHZhbHVlSW5kZXgpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
aW5kZXgoKSkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZVVz
ZS5pbmRleCgpKSkpIHsKICAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKICAgICAgICAgcmhz
Tm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CiAgICAgfQpAQCAtMzI1
LDE0ICszMjUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZwog
I2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJV
c2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2YWx1ZVVz
ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaCkKIHsKICAgICBV
TlVTRURfUEFSQU0ob3duZXIpOwogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7CiAgICAgVU5V
U0VEX1BBUkFNKHNjcmF0Y2gpOwogICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKIAotICAgIGlm
IChpc0tub3duTm90Q2VsbCh2YWx1ZUluZGV4KSkKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFs
dWVVc2UuaW5kZXgoKSkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXUklURV9CQVJS
SUVSX1BST0ZJTElORykKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3
cml0ZUJhcnJpZXIoSlNDZWxsCiAjaWYgRU5BQkxFKEdHQykKICAgICBKSVRDb21waWxlcjo6SnVt
cCByaHNOb3RDZWxsOwogICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFsc2U7Ci0gICAgaWYgKCFp
c0tub3duQ2VsbCh2YWx1ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGljdGlvbihtX2ppdC5nZXRQcmVk
aWN0aW9uKHZhbHVlSW5kZXgpKSkgeworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2UuaW5k
ZXgoKSkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZVVzZS5p
bmRleCgpKSkpIHsKICAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKICAgICAgICAgcmhzTm90
Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CiAgICAgfQpAQCAtMzgzLDcg
KzM4Myw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIAogYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlJiBub2RlLCBib29s
IGludmVydCkKIHsKLSAgICBpZiAoIWludmVydCAmJiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGls
ZDEoKSkgfHwgaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpKQorICAgIGlmICghaW52ZXJ0
ICYmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpLmluZGV4KCkpIHx8IGlzS25vd25OdW1l
cmljKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpKQogICAgICAgICByZXR1cm4gbm9uU3BlY3VsYXRp
dmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxKTsKICAgICAKICAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVl
cEhvbGVCcmFuY2goKTsKQEAgLTgzMSw5ICs4MzEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAK
ICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIsIEpT
Q2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihj
bGFzc0luZm8pKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDFHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGls
ZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUu
Y2hpbGQyKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOwogICAgIAog
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiks
IHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKQEAgLTg1NSwxMyAr
ODU1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGUKICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMSgpKSkgewotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUuY2hpbGQxKCkpOworICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSkgeworICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMy
KGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMyKGltbSksIG9wMi5ncHIoKSksIHRha2VuKTsK
LSAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgeworICAgIH0g
ZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAg
ICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpOwor
ICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCku
aW5kZXgoKSk7CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kaXRpb24sIG9w
MS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSkpLCB0YWtlbik7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwpAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50
KE5vZGUKIHsKICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7CiAgICAgCi0gICAgc2V0
Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNoaWxkMSgpLCBub2RlLmxvY2FsKCkpOworICAgIHNl
dE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkp
OwogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CiB9CiAKQEAgLTEyODksNyAr
MTI4OSw3IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAg
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAg
bm9kZVB0ciA9ICZhdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9n
ZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgICAgICAgICAg
ICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUlu
ZGV4KQpAQCAtMTU5NCwxNiArMTU5NCwxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3Vi
bGVUb0J5dGUoSklUCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckJ5
dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJiBub2RlKQogewotICAg
IE5vZGVJbmRleCBiYXNlSW5kZXggPSBub2RlLmNoaWxkMSgpOwotICAgIE5vZGVJbmRleCB2YWx1
ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKKyAgICBOb2RlVXNlIGJhc2VVc2UgPSBub2RlLmNoaWxk
MSgpOworICAgIE5vZGVVc2UgdmFsdWVVc2UgPSBub2RlLmNoaWxkMygpOwogICAgIAotICAgIGlm
ICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlSW5kZXgpLm1fdHlw
ZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjpjbGFzc0lu
Zm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0J5dGVBcnJheTo6
c19pbmZvKSkpOworICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShiYXNlVXNlKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlVXNlLmluZGV4KCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7
CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogCi0gICAgaWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1
ZUluZGV4KTsKKyAgICBpZiAoYXQodmFsdWVVc2UpLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVVzZS5pbmRleCgpKTsKICAg
ICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwog
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwpAQCAtMTYxNSw4ICsxNjE1LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQgogICAgICAgICBtX2pp
dC5tb3ZlKEltbTMyKGNsYW1wZWRWYWx1ZSksIHNjcmF0Y2hSZWcpOwogICAgICAgICB2YWx1ZS5h
ZG9wdChzY3JhdGNoKTsKICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwotICAgIH0gZWxz
ZSBpZiAoIWF0KHZhbHVlSW5kZXgpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgewotICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlSW5kZXgpOwor
ICAgIH0gZWxzZSBpZiAoIWF0KHZhbHVlVXNlKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKKyAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVz
ZSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcg
c2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5n
cHIoKSwgc2NyYXRjaFJlZyk7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JCCiAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwog
ICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlSW5kZXgpOworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3Jh
dGNoKHRoaXMpOwogICAgICAgICBGUFJSZWcgZnByID0gdmFsdWVPcC5mcHIoKTsKQEAgLTE3NDUs
MTYgKzE3NDUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Jbgog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVj
dWxhdGlvblJlcXVpcmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cywgVHlwZWRBcnJheVNp
Z25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQogewotICAg
IE5vZGVJbmRleCBiYXNlSW5kZXggPSBub2RlLmNoaWxkMSgpOwotICAgIE5vZGVJbmRleCB2YWx1
ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKKyAgICBOb2RlVXNlIGJhc2VVc2UgPSBub2RlLmNoaWxk
MSgpOworICAgIE5vZGVVc2UgdmFsdWVVc2UgPSBub2RlLmNoaWxkMygpOwogICAgIAogICAgIGlm
IChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlVXNlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5t
X2NsYXNzSW5mbykpKTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVl
R1BSOwogICAgIAotICAgIGlmIChhdCh2YWx1ZUluZGV4KS5pc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQodmFsdWVJbmRleCk7CisgICAg
aWYgKGF0KHZhbHVlVXNlKS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gdmFsdWVPZkpTQ29uc3RhbnQodmFsdWVVc2UuaW5kZXgoKSk7CiAgICAgICAgIGlmICghanNW
YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKQEAgLTE3NzAsOCArMTc3MCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgbV9qaXQubW92ZShJbW0zMihz
dGF0aWNfY2FzdDxpbnQ+KGQpKSwgc2NyYXRjaFJlZyk7CiAgICAgICAgIHZhbHVlLmFkb3B0KHNj
cmF0Y2gpOwogICAgICAgICB2YWx1ZUdQUiA9IHNjcmF0Y2hSZWc7Ci0gICAgfSBlbHNlIGlmICgh
YXQodmFsdWVJbmRleCkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVJbmRleCk7CisgICAgfSBl
bHNlIGlmICghYXQodmFsdWVVc2UpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBz
Y3JhdGNoUmVnKTsKQEAgLTE3ODMsNyArMTc4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgdmFsdWVHUFIgPSBzY3JhdGNoUmVnOwogICAgIH0g
ZWxzZSBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewogICAgICAgICBBU1NFUlQoZWxl
bWVudFNpemUgPT0gMSk7Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0
aGlzLCB2YWx1ZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9w
KHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKICAgICAgICAgRlBSUmVnIGZw
ciA9IHZhbHVlT3AuZnByKCk7CkBAIC0xNzkyLDcgKzE3OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgIHZhbHVlLmFkb3B0KHJlc3VsdCk7CiAg
ICAgICAgIHZhbHVlR1BSID0gZ3ByOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgRlBSUmVnIGZwciA9IHZhbHVlT3AuZnByKCk7CiAg
ICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CkBAIC0xODkxLDEzICsxODkxLDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlJiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVp
cmVtZW50cyBzcGVjdWxhdGlvblJlcXVpcmVtZW50cykKIHsKLSAgICBOb2RlSW5kZXggYmFzZUlu
ZGV4ID0gbm9kZS5jaGlsZDEoKTsKLSAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hp
bGQzKCk7CisgICAgTm9kZVVzZSBiYXNlVXNlID0gbm9kZS5jaGlsZDEoKTsKKyAgICBOb2RlVXNl
IHZhbHVlVXNlID0gbm9kZS5jaGlsZDMoKTsKICAgICAKLSAgICBTcGVjdWxhdGVEb3VibGVPcGVy
YW5kIHZhbHVlT3AodGhpcywgdmFsdWVJbmRleCk7CisgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1
aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
KSwgYmFzZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5m
bykpKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIApAQCAtMjA0
Miw4ICsyMDQyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKIAotICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgaW50MzJfdCBkaXZpc29yID0gdmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpKSB7CisgICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CiAgICAgICAgIGlmIChkaXZpc29y
IDwgMCkKICAgICAgICAgICAgIGRpdmlzb3IgPSAtZGl2aXNvcjsKIApAQCAtMjE5OSw4ICsyMTk5
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlJiBub2RlKQogewogICAgIGlmIChtX2ppdC5ncmFw
aCgpLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSwgbV9qaXQuY29kZUJsb2NrKCkpKSB7
Ci0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAg
ICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4
KCkpKSB7CisgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnRB
c0ludDMyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0yMjE0LDkgKzIyMTQsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWRkKE5vZGUmIG5vCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5j
aGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5p
bmRleCgpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJl
ckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1t
MiA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKSB7CkBAIC0yMjc5LDkgKzIyNzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWRkKE5vZGUmIG5vCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9k
ZSYgbm9kZSkKIHsKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5hZGRTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUsIG1faml0LmNvZGVCbG9jaygpKSkgewotICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2Rl
LmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2
YWx1ZU9mTnVtYmVyQ29uc3RhbnRBc0ludDMyKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAg
aW50MzJfdCBpbW0yID0gdmFsdWVPZk51bWJlckNvbnN0YW50QXNJbnQzMihub2RlLmNoaWxkMigp
LmluZGV4KCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAg
ICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkgewpAQCAtMjI5NCw4ICsyMjk0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoU3ViKE5vZAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAg
ICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFzSW50MzIobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSkpIHsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZOdW1iZXJDb25zdGFudEFz
SW50MzIobm9kZS5jaGlsZDEoKS5pbmRleCgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCkBAIC0yNDIxLDcgKzI0MjEsNyBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFu
dChOb2RlJiBub2RlLCBOb2RlSW5kZXggdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpCitib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChOb2RlJiBub2RlLCBOb2Rl
VXNlIHZhbHVlLCBKU1ZhbHVlIGNvbnN0YW50KQogewogICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCB2YWx1ZSk7CiAgICAgCkBAIC0yNDk4LDE0ICsyNDk4LDE0IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAvLyAxKSBJZiBlaXRoZXIgb3BlcmFuZCBp
cyBhIGNvbnN0YW50IGFuZCB0aGF0IGNvbnN0YW50IGlzIG5vdCBhIGRvdWJsZSwgaW50ZWdlciwK
ICAgICAvLyAgICBvciBzdHJpbmcsIHRoZW4gZG8gYSBKU1ZhbHVlIGNvbXBhcmlzb24uCiAgICAg
Ci0gICAgaWYgKGlzSlNDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CisgICAgaWYgKGlzSlND
b25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICBpZiAo
IXZhbHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1
cm4gY29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQobm9kZSwgbm9kZS5jaGlsZDIoKSwgdmFsdWUp
OwogICAgIH0KICAgICAKLSAgICBpZiAoaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMigpKTsK
KyAgICBpZiAoaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpIHsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7
CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkKICAg
ICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudChub2RlLCBub2RlLmNo
aWxkMSgpLCB2YWx1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTA2Njk3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIs
NiArMTgyLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgp
W25vZGVJbmRleF07CiAgICAgfQorICAgIE5vZGUmIGF0KE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhdChub2RlVXNlLmluZGV4KCkpOworICAgIH0KICAgICAKICAgICBH
UFJSZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwog
ICAgIEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CkBAIC0yMTgsNiArMjIyLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CiAgICAgICAgIHJldHVybiBpbmZvLmNhblJldXNlKCk7CiAgICAgfQor
ICAgIGJvb2wgY2FuUmV1c2UoTm9kZVVzZSBub2RlVXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNhblJldXNlKG5vZGVVc2UuaW5kZXgoKSk7CisgICAgfQogICAgIEdQUlJlZyByZXVzZShHUFJS
ZWcgcmVnKQogICAgIHsKICAgICAgICAgbV9ncHJzLmxvY2socmVnKTsKQEAgLTMxOCwxMyArMzI2
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8uZ3ByKCkpOwog
I2VuZGlmCiAgICAgfQorICAgIHZvaWQgdXNlKE5vZGVVc2Ugbm9kZVVzZSkKKyAgICB7CisgICAg
ICAgIHVzZShub2RlVXNlLmluZGV4KCkpOworICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIG1hcmtD
ZWxsQ2FyZChNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hH
UFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIpOwogICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihN
YWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJS
ZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCi0gICAgdm9pZCB3cml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUlu
ZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BS
UmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICB2b2lkIHdyaXRl
QmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZVVzZSB2YWx1ZVVz
ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJl
ZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5k
LCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIg
PSBJbnZhbGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBH
UFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5k
LCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKKyAgICB2b2lkIHdyaXRlQmFy
cmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVVc2UgdmFsdWVVc2UsIFdy
aXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOwog
CiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJ
bnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHBy
ZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVn
KQogICAgIHsKQEAgLTg3NSw3ICs4ODcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIENoZWNr
IGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCiAgICAgICAgIE5vZGUm
IGxhc3ROb2RlID0gYXQobGFzdE5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBsYXN0Tm9kZS5v
cCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0
Tm9kZUluZGV4IDogTm9Ob2RlOworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNo
ICYmIGxhc3ROb2RlLmNoaWxkMSgpLmluZGV4KCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9k
ZUluZGV4IDogTm9Ob2RlOwogICAgIH0KICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlVmFs
dWVUb051bWJlcihOb2RlJik7CkBAIC04ODUsMTUgKzg5NywxNSBAQCBwcml2YXRlOgogICAgIGVu
dW0gU3BpbGxSZWdpc3RlcnNNb2RlIHsgTmVlZFRvU3BpbGwsIERvbnRTcGlsbCB9OwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FjaGVkR2V0QnlJZChDb2RlT3Jp
Z2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3Bp
bGwpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BS
UmVnIHZhbHVlLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRo
VGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENv
ZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIE5vZGVVc2UgdmFsdWVVc2UsIEdQ
UlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWNoZWRHZXRCeUlk
KENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRH
UFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUg
PSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJl
ZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2Fk
R1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmln
aW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFs
dWVQYXlsb2FkR1BSLCBOb2RlVXNlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbmRpZgogCi0gICAgdm9pZCBub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52
ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwo
Tm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0
ID0gZmFsc2UpOwotICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiwgTm9k
ZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIHZvaWQgbm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKE5vZGVVc2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQg
PSBmYWxzZSk7CisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChOb2Rl
VXNlIG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFs
c2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiwgTm9kZVVzZSBv
cGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVy
RnVuY3Rpb24pOwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUoTm9k
ZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9F
SkogaGVscGVyRnVuY3Rpb24pOwpAQCAtMTUwNSwxNSArMTUxNywxNSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXgsIGNvbnN0IENsYXNzSW5mbyosIFByZWRpY3Rpb25DaGVja2VyKTsKICAgICB2
b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgY29uc3QgQ2xhc3NJbmZvKiwgUHJlZGlj
dGlvbkNoZWNrZXIpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUmKTsKLSAgICB2b2lk
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggdmFsdWUsIGNvbnN0IENs
YXNzSW5mbyosIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOworICAgIHZvaWQgY29tcGlsZU9i
amVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVVc2UgdmFsdWUsIGNvbnN0IENsYXNzSW5mbyosIGJv
b2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9k
ZSYpOwotICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBC
bG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCBjb25zdCBDbGFzc0luZm8qLCBi
b29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKKyAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJh
bmNoKE5vZGVVc2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IGNvbnN0IENsYXNzSW5mbyosIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQg
ZW1pdEJyYW5jaChOb2RlJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW50ZWdlckNvbXBhcmUo
Tm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNv
bXBpbGVEb3VibGVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9u
KTsKICAgICAKLSAgICBib29sIGNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KE5vZGUmLCBOb2Rl
SW5kZXggdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOworICAgIGJvb2wgY29tcGlsZVN0cmljdEVx
Rm9yQ29uc3RhbnQoTm9kZSYsIE5vZGVVc2UgdmFsdWUsIEpTVmFsdWUgY29uc3RhbnQpOwogICAg
IAogICAgIGJvb2wgY29tcGlsZVN0cmljdEVxKE5vZGUmKTsKICAgICAKQEAgLTE1OTMsNiArMTYw
NSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0
LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7CiAgICAgfQor
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIE5vZGVVc2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJj
ZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsKTsKKyAgICB9CiAgICAgLy8gQWRkIGEgc2V0
IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAg
dm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCkKICAgICB7CkBAIC0xNjAwLDYgKzE2MTYsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwg
SnVtcFZlY3RvcltpXSk7CiAgICAgfQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVVc2Ugbm9kZVVzZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKKyAgICB7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wc1Rv
RmFpbCk7CisgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGggYWRkaXRp
b25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNv
dmVyeSkKICAgICB7CkBAIC0xNjA4LDYgKzE2MjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAg
ICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFs
dWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0
aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkp
OwogICAgIH0KKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlVXNlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQorICAg
IHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNl
LmluZGV4KCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKKyAgICB9CiAKICAgICAvLyBDYWxsZWQg
d2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWls
LgogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgpCkBAIC0xNjIwLDYg
KzE2NDQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkpOwogICAgICAgICBtX2NvbXBpbGVPa2F5
ID0gZmFsc2U7CiAgICAgfQorICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVVc2Ugbm9kZVVzZSkK
KyAgICB7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFs
dWVSZWdzLCBub2RlVXNlLmluZGV4KCkpOworICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKQEAgLTE3MTIsMTYgKzE3NDAsMTYgQEAgcHJpdmF0
ZToKIAogY2xhc3MgSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEludGVn
ZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBs
aWNpdCBJbnRlZ2VyT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAg
ICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBt
X2luZGV4KHVzZS5pbmRleCgpKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJS
ZWcpCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQog
I2VuZGlmCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZChpbmRleCkpCisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAg
ICAgICAgICAgZ3ByKCk7CiAgICAgfQogCkBAIC0xNzY0LDEzICsxNzkyLDEzIEBAIHByaXZhdGU6
CiAKIGNsYXNzIERvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IERvdWJsZU9w
ZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0
IERvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZVVzZSB1c2UpCiAgICAgICAg
IDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9pbmRl
eCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVnKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWRE
b3VibGUoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZERvdWJsZShtX2luZGV4KSkK
ICAgICAgICAgICAgIGZwcigpOwogICAgIH0KIApAQCAtMTgwNSw5ICsxODMzLDkgQEAgcHJpdmF0
ZToKIAogY2xhc3MgSlNWYWx1ZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IEpTVmFs
dWVPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBs
aWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAg
ICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBt
X2luZGV4KHVzZS5pbmRleCgpKQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0xODE2
LDEyICsxODQ0LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAg
ICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGdwcigpOwogI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9IElu
dmFsaWRHUFJSZWc7CiAgICAgICAgIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAgICAgICAgIGZpbGwoKTsKICNlbmRpZgogICAg
IH0KQEAgLTE5MTksMTMgKzE5NDcsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3RvcmFnZU9wZXJh
bmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklU
KiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVj
dWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0gICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQogICAg
ICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgIGlm
IChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogICAg
IApAQCAtMjA4OCwxNiArMjExNiwxNiBAQCBwcml2YXRlOgogCiBjbGFzcyBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVVc2UgdXNlKQog
ICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAs
IG1faW5kZXgodXNlLmluZGV4KCkpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQ
UlJlZykKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9mb3JtYXQoRGF0YUZvcm1hdE5vbmUp
CiAjZW5kaWYKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9pbmRleCkpCiAg
ICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIxMzUsMTMgKzIxNjMsMTMgQEAgcHJpdmF0
ZToKIAogY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
Tm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQp
Ci0gICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgp
KQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAg
fQogCkBAIC0yMTc2LDEzICsyMjA0LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZVVzZSB1c2UpCiAg
ICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwg
bV9pbmRleCh1c2UuaW5kZXgoKSkKICAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBS
UmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQoaW5kZXgpKQorICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChtX2luZGV4KSkKICAgICAg
ICAgICAgIGZwcigpOwogICAgIH0KIApAQCAtMjIxMiwxMyArMjI0MCwxMyBAQCBwcml2YXRlOgog
CiBjbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQor
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5v
ZGVVc2UgdXNlKQogICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICAsIG1faW5kZXgodXNlLmluZGV4KCkpCiAgICAgICAgICwgbV9ncHJPckludmFs
aWQoSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobV9p
bmRleCkpCiAgICAgICAgICAgICBncHIoKTsKICAgICB9CiAKQEAgLTIyNTMsMTMgKzIyODEsMTMg
QEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IE5vZGVJbmRleCBpbmRleCkKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZChT
cGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlVXNlIHVzZSkKICAgICAgICAgOiBtX2ppdChqaXQpCi0g
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2luZGV4KHVzZS5pbmRleCgpKQog
ICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkKG1faW5kZXgpKQogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQog
ICAgIAo=
</data>
<flag name="review"
          id="127065"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>